Autor | Zpráva | ||
---|---|---|---|
svadla Profil |
#1 · Zasláno: 29. 10. 2008, 12:00:13
Zdravim,
potrebuji nahodne vybrat polozku z pole, kde ke kazde polozce znam jeji procentualni zastoupeni ve vyberu. A samozrejme potrebuji aby po X vyberech, alespon priblizne, souhlasila procenta. Napada vas nejake jednoduche a elegantni reseni? dekuji za nazory |
||
nightfish Profil |
#2 · Zasláno: 29. 10. 2008, 12:25:45 · Upravil/a: nightfish
„Napada vas nejake jednoduche a elegantni reseni? “
použil bych ruletový výběr, implementace zhruba takhle <?php $poleSProcenty = array(0.2, 0.3, 0.1, 0.3, 0.05, 0.05); // procentualni zastoupeni, soucet musi byt 1 $hodnoty = array("prvni", "druha", "treti", "crtvrta", "pata", "sesta"); // polozky pole $vysledky = array(0,0,0,0,0,0); // pole pro ulozeni vysledku for ($j = 0; $j < 10000; $j++) { // hodnekrat zopakujeme $i = lcg_value(); // nahodne cislo mezi 0 a 1 $mezisoucet = 0; // mezisoucet pro ruletovy vyber foreach ($poleSProcenty as $k => $v) { // prochazime jednotliva procenta $mezisoucet += $v; if ($i < $mezisoucet) { $vysledky[$k]++; break; } } } // vypis procentualniho zastoupeni - pro kontrolu foreach ($vysledky as $k => $v) { echo ($v/10000.0)."<br>"; } ?> |
||
svadla Profil |
#3 · Zasláno: 29. 10. 2008, 12:55:17
nightfish
moc pekne, dekuji. Ale asi uplne nechapu co je vysledkem, v poli $vysledky jsou hodnoty, nahodne podobne poli $poleSProcenty. Vybranym prvkem tedy bude to s nejvetsim (nejmensim) rozdilem mezi temi poli? Kazdopadne dik za pekny kod, to jsi ted napsal, nebo uz to mas nekde pripravene pro tuto otazky? :) |
||
nightfish Profil |
#4 · Zasláno: 29. 10. 2008, 13:16:49
„v poli $vysledky jsou hodnoty, nahodne podobne poli $poleSProcenty“
nene... pole $vysledky je tam jenom pro demonstraci toho, že ty pravděpodobnosti po dostatečném počtu pokusů odpovídají... vybraný prvek je prvek s indexem $k před tím breakem; vesměs pro tvé účely by měl postačovat jenom ten vnitřek cyklu for, pole $vysledky můžeš vymazat a co uděláš s vybraným prvkem pole už je na tobě... „Kazdopadne dik za pekny kod, to jsi ted napsal, nebo uz to mas nekde pripravene pro tuto otazky? :)“ to jsem napsal... před rokem jsem to implementoval ve Smalltalku, takže vzpomenou si na princip nebyl takový problém |
||
svadla Profil |
#5 · Zasláno: 29. 10. 2008, 14:01:52 · Upravil/a: svadla
nightfish
no jasny, uz mi to docvaklo. diky vyreseno |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0