Wie generiert man Zufallszahlen, die mit gleicher Wahrscheinlichkeit einen vordefinierten Wert ergeben?

Susan Sarandon
Freigeben: 2024-10-27 05:14:02
Original
196 Leute haben es durchsucht

How to Generate Random Numbers Summing to a Predefined Value with Equal Probability?

Generieren von Zufallszahlen, die zu einem vordefinierten Wert summiert werden

In diesem Zusammenhang wollen wir eine Liste von Pseudozufallszahlen erstellen, die sich kollektiv addieren bis zu einem bestimmten vorgegebenen Wert. Eine Methode besteht darin, eine Zahl innerhalb eines bestimmten Bereichs zufällig zu generieren, sie von der Gesamtsumme zu subtrahieren und diesen Vorgang zu wiederholen, bis die Summe dem gewünschten Wert entspricht. Allerdings begünstigt dieser Ansatz die zuerst generierte Zahl hinsichtlich ihres Beitrags zur Summe.

Um Einheitlichkeit zu gewährleisten, wurde eine ausgefeiltere Lösung entwickelt:

<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>
Nach dem Login kopieren

Diese Methode generiert eine Liste positiver Ganzzahlen, deren Summe den Zielwert ergibt. Das Schlüsselkonzept besteht darin, dass jede mögliche Zahlenkombination mit gleicher Wahrscheinlichkeit generiert wird. Darüber hinaus ist die Ausweitung dieser Technik auf verschiedene Summen und eine unterschiedliche Anzahl von Zufallszahlen unkompliziert.

Wenn wir beispielsweise n auf 4 und die Summe auf 40 setzen, erhalten wir möglicherweise die folgende Ausgabe: [4, 4, 25 , 7]. Es ist wichtig zu beachten, dass jedes Element dieser Liste, wenn es summiert wird, den vordefinierten Wert 40 ergibt.

Um nicht positive ganze Zahlen zu berücksichtigen, ist eine Modifikation verfügbar:

<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>
Nach dem Login kopieren

By Indem wir jeden Wert um eins erhöhen, können wir eine Liste nicht negativer Ganzzahlen erstellen, die sich zur gewünschten Summe addieren.

Diese Methode stellt sicher, dass jede mögliche Kombination, unabhängig davon, ob die Zahlen positiv oder nicht negativ sind, hat die gleiche Wahrscheinlichkeit, erzeugt zu werden. Aufgrund ihrer benutzerfreundlichen Implementierung und Vielseitigkeit in verschiedenen Szenarien sind constrained_sum_sample_pos und constrained_sum_sample_nonneg zu einem integralen Bestandteil von Aufgaben zur Zufallszahlengenerierung in Python geworden.

Das obige ist der detaillierte Inhalt vonWie generiert man Zufallszahlen, die mit gleicher Wahrscheinlichkeit einen vordefinierten Wert ergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!