Autor | Zpráva | ||
---|---|---|---|
benett Profil |
#1 · Zasláno: 30. 6. 2009, 19:05:39
Omlouvám se za hloupý dotaz, ale nějak nemůžu přijít na to,
proč mi tento kód vygeneruje občas i 2 stejné hodnoty, i když by měly být všechny různé. var p=new Array(); var poc=10; p[0]=1234; for (var i=1;i<poc;i++){ do {p[i]=Math.round(Math.random()*(poc+1));} while (p[i]==p[i-1]) } |
||
fajzen Profil |
#2 · Zasláno: 30. 6. 2009, 21:39:58
asi to bude tým, že kontroluješ len zhodu medzi posledným a predposledným prvkom, takže keď máš 3 prvky, tak prvý je napr. 1, druhý sa bude generovať tak dlho, aby to nebolo 1, napr. 2 a tretí sa bude generovať tak dlho, aby to nebolo 2, ale 1 to môže byť atď.
|
||
benett Profil |
#3 · Zasláno: 30. 6. 2009, 21:53:01
právě jsem si to taky uvědomil, díky :)
|
||
los Profil * |
Otázka síce bola zodpovedaná, ale ešte by som sa chcel spýtať, čo vlastne chceš dosiahnuť? Podľa kódu to vyzerá tak, že chceš vytvoriť pole, ktoré obsahuje všetky hodnoty od 0 do poc=10.
V tom prípade bude lepšie náhodne zamiešať pole so všetkými prvkami, než postupne vyberať náhodné prvky: var poc = 10; var p = [] for (var i = 0; i < poc; ++i) p[i] = i; for (var i = poc; i > 1;) { var j = Math.random() * i-- | 0; var t = p[i]; p[i] = p[j]; p[j] = t; } Dá sa to zapísať aj kratšie, ale kvôli prehľadnosti som to nechal takto. Písal som to priamo sem, takže je možné, že tam sú nejaké chyby, ale princíp je zrejmý. |
||
Chamurappi Profil |
#5 · Zasláno: 30. 6. 2009, 23:54:50 · Upravil/a: Chamurappi
Reaguji na losa:
Mně se líbí míchání pole sortem: var poc = 10; var p = [] for (var i = 0; i < poc; ++i) p[i] = i; p = p.sort(function() { return Math.random() - 0.5; }); |
||
los Profil * |
#6 · Zasláno: 1. 7. 2009, 00:02:28
Chamurappi
Áno, sort vyzerá lepšie. Vďaka za upravenie formátovania. |
||
_es Profil |
#7 · Zasláno: 1. 7. 2009, 21:41:48
Chamurappi
Toto zoradenie asi nezaručí celkom náhodné zoradenie. Algoritmus na zoradenie asi predpokladá, že pre rovnaké prvky vráti funkcia vždy to isté. Rôzne prehliadače, pri rovnakom poli a funkcii, ktorá tej podmienke vyhovuje, volajú tú funkciu rôzny počet krát, podľa toho, aký algoritmus je v tom prehliadači implementovaný na zoradenie - skúšal som to. Takže ten tvoj kód asi nezaručí úplne matematicky náhodné zoradenie, aj keď celkom istý si tým nie som. |
||
Chamurappi Profil |
#8 · Zasláno: 1. 7. 2009, 22:02:39
Reaguji na _es:
Něco na tom bude. Našel jsem teď na toto téma poučnou diskusi na stackoverflow.com. |
||
_es Profil |
#9 · Zasláno: 1. 7. 2009, 22:10:45
Chamurappi
Ja som o tom nič nehľadal, no podvedome sa mi na tom tvojom kóde hneď niečo nepáčilo. |
||
_es Profil |
#10 · Zasláno: 1. 7. 2009, 22:44:49 · Upravil/a: _es
Toto by malo byť náhodné práve tak ako funkcia Math.random:
var poc = 10, p = [], x = []; for(var i = 0; i < poc; ++i) p[i] = i; for(i = 0; i < poc; ++i) x[i] = p.splice(Math.floor(Math.random() * (poc - i)), 1)[0]; p = x; |
||
Časová prodleva: 15 let
|
0