Heim  >  Artikel  >  Backend-Entwicklung  >  Wie generiert man Zufallszahlen mit fester Summe und garantierter Gleichverteilung?

Wie generiert man Zufallszahlen mit fester Summe und garantierter Gleichverteilung?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 10:50:30663Durchsuche

How to Generate Random Numbers with a Fixed Sum, Guaranteed Uniform Distribution?

Zufallszahlen mit einer festen Summe generieren

Die Herausforderung besteht darin, eine Reihe von Pseudozufallszahlen zu generieren, deren Summe einem vordefinierten Wert entspricht . Konkret geht es darum, wie man vier Zahlen generiert, die addiert 40 ergeben.

Anstatt sich auf eine Methode zu verlassen, die die Verteilung der ersten Zahl verzerren könnte, wird ein einheitlicherer Ansatz verwendet. Die Lösung verwendet eine Strategie, bei der der vordefinierte Wert mithilfe zufällig ausgewählter Teiler in kleinere Segmente unterteilt wird.

Angenommen, wir haben vier zufällige positive ganze Zahlen (e, f, g und h), sodass 0 < e < f < g < h < 40. Wir können die gewünschten vier Zahlen ableiten als:

a = e
b = f - e
c = g - f
d = 40 - g

Diese Technik garantiert eine gleiche Wahrscheinlichkeit für jeden Zahlensatz und sorgt so für eine gleichmäßige Verteilung. Die resultierenden Zufallszahlen erfüllen die Anforderung der Summierung auf den vordefinierten Wert.

In Erweiterung dieses Konzepts generiert die folgende Python-Funktion eine Zufallsliste positiver Ganzzahlen, die eine bestimmte Summe ergeben:

<code class="python">import random

def constrained_sum_sample_pos(n, total):
    """Return a randomly chosen list of n positive integers summing to total.
    Each such list is equally likely to occur."""

    dividers = sorted(random.sample(range(1, total), n - 1))
    return [a - b for a, b in zip(dividers + [total], [0] + dividers)]</code>

Um nicht negative ganze Zahlen zu erzeugen, wird eine zusätzliche Transformation verwendet:

<code class="python">def constrained_sum_sample_nonneg(n, total):
    """Return a randomly chosen list of n nonnegative integers summing to total.
    Each such list is equally likely to occur."""

    return [x - 1 for x in constrained_sum_sample_pos(n, total + n)]</code>

Das obige ist der detaillierte Inhalt vonWie generiert man Zufallszahlen mit fester Summe und garantierter Gleichverteilung?. 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