Heim >Backend-Entwicklung >PHP-Tutorial >Wie generiert man gewichtete Zufallszahlen in PHP?

Wie generiert man gewichtete Zufallszahlen in PHP?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-03 08:40:08249Durchsuche

How to Generate Weighted Random Numbers 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn