PHP generiert effizient m eindeutige Zufallszahlen im n-Bereich (m
Hinweis: Es wird auch im Buch „Programming Pearls“ erwähnt, der Titel lautet „So generieren Sie effizient m sich nicht wiederholende Zufallszahlen im Bereich von n (mErste Schritte mit PHP-Programmierung zum Beherrschen )
Dieser Algorithmus verwendet sehr geschickt die Position der Zufallszahl (den Index des Arrays), anstatt jedes Mal die Zufallszahl selbst zu verwenden , es wird aus dem Wertebereich ausgeschlossen und beim nächsten Mal werden nur die verbleibenden Zahlen ausgewählt. Die Auswahl der Zufallszahlen kann in einem Durchlauf abgeschlossen werden, was sehr effizient ist.
function rand_num($num='200'){ for($i=0;$i<$num;$i++){ $n[$i] = $i; } for($i=0;$i<$num;$i++){ $rand = mt_rand($i,$num-1); //数组 随机数交换下标 if($n[$i] == $i){ $n[$i] = $n[$rand]; $n[$rand] = $i; } } }
1. Der erste Schritt besteht darin, jeder Zahl im Array in der Reihenfolge ihres Index einen Wert zuzuweisen und ein Array von numerischen Schlüsselwerten $num zu erhalten, die in der entsprechenden Reihenfolge angeordnet sind.
2. Beginnen Sie im zweiten Schritt mit dem Abrufen der Zufallszahl $rand im Bereich [i, $num-1] und verwenden Sie die erhaltene Zufallszahl $rand als Index, der dem aktuellen Positionsschlüssel entspricht i im Array-Wert $rand, ersetzen Sie den Wert, der dem Index des Schlüssels $rand im Array entspricht, durch i. Dies ist tatsächlich ein gegenseitiger Austausch von Array-Schlüsselwerten. Die Bedeutung besteht darin, die generierte Zufallszahl aus dem Wertebereich [i,$num-1] auszuschließen und beim nächsten Mal den Wert aus den verbleibenden Zahlen [i+1,num-1] zu übernehmen.
3. Um wiederholte Werte zu vermeiden, führen Sie alternierende Operationen nur an den unveränderten Schlüssel-Wert-Paaren durch, dh führen Sie alternierende Operationen an den Positionen der ursprünglichen Array-Sequenz durch (Schlüssel == Wert). ).
4.
Das obige ist der detaillierte Inhalt vonPHP-Zufallszahl wiederholt sich nicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!