od Nargon 23. 5. 2013 12:10
Generování náhodných čísel tak aby se neopakovali lze jedině tak, že v cyklu stále dokola generuješ náhodné číslo dokud se netrefíš do toho čísla co tam není.
Tobě tam chybí ten cyklus. Ty vygeneruješ jedno náhodné číslo, zkontroluješ zda tam už není. Pokud tam je vygeneruješ druhé náhodné číslo a to tam zapíšeš (ale už nezkontroluješ zda i tohle to druhé číslo tam náhodou není)
Ovšem tohle zmíněné řešení je vhodné jen když je velice malá pravděpodobnost kolize dvou náhodně generovaných čísel (tj máš vygenerovat třeba 10 čísel z intervalu 0..100, ale čím více čísel z toho intervalu musíš vyplnit tím je toto řešení horší. Může se dostat až do "téměř nekonečné smyčky". Představ si že máš vygenerovat 1 milion takto náhodných čísel do 1 milionu. A máš už skoro všechny, jen ti chybí posledních 5 čísel. A než ten generátor náhodně vyplodí to jedno číslo co tam můžeš zadat, tak můžeš čekat třeba hodinu, nebo i pár dní.
Pro tyhle situace, kdy máš vygenerovat 10 čísel bez opakování z intervalu 0..9, je nejlepší řešení je nacpat do pole od začátku tj: 0,1,2,3,4,5,6,7,8,9 a následně toto pole náhodně zamíchat. Vygeneruješ dvojici indexů a prohodíš dva prvky na těch indexech. Napr vygeneruješ 3 a 5 a tyhle prvky prohodíš. Dostaneš: 0,1,2,5,4,3,6,7,8,9. A tohle opakuješ tolikrát jak hodně to chceš promíchat. Třeba 5x délka pole. Tj pro tenhle příklad vygeneruješ 50 dvojic náhodných indexů a ty prvky prohodíš.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)