Autor Zpráva
svadla
Profil
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
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
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
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
nightfish
no jasny, uz mi to docvaklo. diky
vyreseno
Toto téma je uzamčeno. Odpověď nelze zaslat.

0