![]() Mailinglisten-Archive |
"Jens Maukisch" <j.maukisch_(at)_designforweb.de> writes: >Generier doch einfach eine Zufallszahl (die ist ja glaube ich >0<= zufallszahl<=1, wenn nicht kann man die ja noch nen >bisschen dividieren) und schau einfach ob der weri der dabei rauskommt >kleiner als 1/6, 2/6 oder 3/6 ist... Danke, so �hnlich habe ich es dann letzendlich auch gemacht... >...und f�g einfach noch nen wert in den array ein, ...obwohl ich nicht verstanden habe, was Du damit gemeint hast. Ich habe mit einem Array in der Form ( "a" => 1, "b" => 2, "c" => 3, "d" => 2, "e" => 1 ) als "Wahrscheinlichkeitsdichte" angefangen und die Werte aufsummiert um so eine "Wahrscheinlichkeitsverteilung" zu erreichen. Also das Array wie folgt umgerechnet: ( "a" => 1, "b" => 3, // = 1 + 2 "c" => 6, // = 3 + 3 "d" => 8, // = 6 + 2 "e" => 9 // = 7 + 1 ) Ok, um echte Wahrscheinlichkeitswerte zu bekommen, m�sste man noch auf 1 normieren, aber mit Integer finde ich es besser und ist vermutlich auch einen Tick schneller. Dann nur noch eine zuf�llige Schwelle erzeugt: mt_srand ((double) microtime() * 1000000); $schwelle = mt_rand (1, 9); und die Schwelle im Array gesucht: reset ($array); foreach ($array as $key => $value) { if ($value >= $schwelle) { echo "$key"; break; } } Funktioniert soweit wunderbar! Allerdings war mir das Umrechnen der Tabelle und Maximumsuche in PHP zu langsam so da� ich die erste Tabelle als Textdatei abgelegt habe und daraus die zweite Tabelle und den Maximalwert extern mit einem Perl-Skript erzeuge und statisch im PHP-Skript einbinde. Wenn man erste Tabelle noch nach absteigenden Wahrscheinlichkeiten sortieren w�rde, w�re die foreach() Schleife auch besser optimiert, da die wahrscheinlicheren Werte am Anfang w�ren. Wenn jemand einen besseren Vorschlag hat, immer her damit :) Gru�, Andreas
php::bar PHP Wiki - Listenarchive