Heim > Artikel > Backend-Entwicklung > Einige Ideen zur Generierung von Zufallszahlen mit ungleichen Wahrscheinlichkeiten
Titel: Generieren Sie Zufallszahlen von 0 bis 9, wobei die Eintrittswahrscheinlichkeit von 0 bis 9 in der Reihenfolge abnimmt
Die allgemeine Idee besteht darin, 10 0er, 9 1er, 8 2er... zu setzen. Fügen Sie 2 8er und 1 9 in das Array ein, generieren Sie dann zufällig den Array-Index und extrahieren Sie die Zahl entsprechend dem Index.
Zweite Idee: Generieren Sie zwei Zufallszahlen von 0 bis 9 und nehmen Sie die kleinere. Diese Idee (vorgeschlagen durch den Zauber des Armbands) kennt das eigentliche Prinzip nicht, aber Experimente haben bewiesen, dass sie tatsächlich den Effekt erzielen kann.
Überprüfungsmethode:
Programmcode
< ;?php
function fun(){
$num = rand(0,9); //Zahlen innerhalb von 10 sind gleichmäßig verteilt
$ num2 = rand(0 ,9);
($num2<=$num) ? $return.=$num2 : $return.=$num;
return $return;
}
function totalStr($haystack, $needle,$i = 0){//Überprüfen Sie, wie oft ein bestimmtes Zeichen in der Zeichenfolge vorkommt
while(strpos( $haystack,$needle) ! == false) {
$haystack = substr($haystack, (strpos($haystack,$needle) + 1));
$i++;
}
return $i;
}
for ($i=0;$i<=1000;$i++){
$str .= fun ();
}
for ($i=0;$i<=9;$i++){
echo totalStr($ str,"$i") ."n" //Anzahl der Vorkommen von 0-9
}
?>
Kurz nach dem Schreiben dieses Artikels verfügt der Armbandanhänger über einen optimierten Algorithmus
Einzelheiten finden Sie unten:
Programmcode
Funktion getRand($min,$max) {
$num =rand($min,$max);
return rand($min,$num);
}
Auch eine von einem anderen Experten geschriebene Funktion mit starken mathematischen Ideen und nicht leicht zu verstehen
Programmcode
Funktion getRandomByFactor($max,$factor=2){
$c = rand(0,pow($max,$factor));
return $max - ceil(pow($c,1/$factor));
}