Heim >Backend-Entwicklung >PHP-Tutorial >Wie generiert man gewichtete Zufallszahlen in PHP?
Gewichtete Zufallszahlengenerierung in PHP
Frage:
Wie können Sie Zufallszahlen generieren? zwischen 1 und 10, aber mit einer höheren Wahrscheinlichkeit, die Zahlen 3, 4 und 5 auszuwählen als 8, 9 und 10 in PHP?
Antwort:
Um diese gewichtete Zufälligkeit zu erreichen, können Sie ein assoziatives Array verwenden, das jedes gewünschte Ergebnis seinem Gewicht zuordnet. In diesem Fall können Sie ein Array erstellen, in dem 3, 4 und 5 höhere Gewichtungen haben (z. B. 3 – 50 %, 4 – 30 %, 5 – 20 %) als 8, 9 und 10 (z. B. 8 – 10). %, 9 - 5 %, 10 - 5 %.
Basierend auf den zugewiesenen Gewichtungen können Sie eine Zufallszahl generieren Verwendung von mt_rand im Bereich der Gesamtsumme der Gewichte. Dann durchlaufen Sie das Array und subtrahieren jeden Gewichtswert von der Zufallszahl, bis er negativ wird. Der Array-Schlüssel, der der Gewichtung entspricht, die die Zufallszahl negativ macht, ist das gewünschte Ergebnis.
Hier ist eine PHP-Funktion, die diese gewichtete Zufälligkeit implementiert:
/** * getRandomWeightedElement() * Utility function for getting random values with weighting. * Pass in an associative array, such as array('A'=>5, 'B'=>45, 'C'=>50) * An array like this means that "A" has a 5% chance of being selected, "B" 45%, and "C" 50%. * The return value is the array key, A, B, or C in this case. Note that the values assigned * do not have to be percentages. The values are simply relative to each other. If one value * weight was 2, and the other weight of 1, the value with the weight of 2 has about a 66% * chance of being selected. Also note that weights should be integers. * * @param array $weightedValues */ function getRandomWeightedElement(array $weightedValues) { $rand = mt_rand(1, (int) array_sum($weightedValues)); foreach ($weightedValues as $key => $value) { $rand -= $value; if ($rand <= 0) { return $key; } } }
Das obige ist der detaillierte Inhalt vonWie generiert man gewichtete Zufallszahlen in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!