Heim >Backend-Entwicklung >Python-Tutorial >Wie generiert man Zufallszahlen mit einer vordefinierten Summe und stellt eine gleiche Wahrscheinlichkeitsverteilung sicher?

Wie generiert man Zufallszahlen mit einer vordefinierten Summe und stellt eine gleiche Wahrscheinlichkeitsverteilung sicher?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 16:22:47191Durchsuche

How to Generate Random Numbers with a Predefined Sum and Ensure an Equal Probability Distribution?

Zufallszahlen mit einer vordefinierten Summe generieren

Einführung: Gleiche Wahrscheinlichkeitsverteilung

Zufallszahlen zu generieren, die einen vorgegebenen Wert ergeben, stellt eine interessante Herausforderung dar in der Computerprogrammierung. Obwohl einfache Ansätze ausreichend erscheinen mögen, führen sie oft zu Verzerrungen, da bestimmte Zahlen eine höhere Wahrscheinlichkeit haben, ausgewählt zu werden. Dieser Artikel befasst sich mit einer verfeinerten Lösung, die eine gleiche Wahrscheinlichkeitsverteilung für alle möglichen Kombinationen gewährleistet.

Eingeschränkte Summenstichprobenfunktion

Die bereitgestellte Lösung basiert auf der Funktion „constrained_sum_sample_pos“, um eine gleichmäßige Verteilung möglicher Ergebnisse zu erreichen. Diese Funktion generiert eine Liste positiver Ganzzahlen (n), deren Summe den Zielwert (Gesamtwert) ergibt. Ihr Hauptmerkmal ist, dass jede Kombination die gleiche Chance hat, ausgewählt zu werden.

Gleichmäßige Verteilung und Anpassung

Die Stärke der Funktion liegt in ihrer mathematischen Grundlage, die garantiert, dass alle möglichen Kombinationen gleich wahrscheinlich sind. Darüber hinaus lässt es sich leicht an andere Szenarien anpassen, z. B. die Generierung von sieben Zahlen, die 100 oder eine andere gewünschte Summe ergeben.

Implementierung

Die Python-Implementierung der Funktion wird unten bereitgestellt:

<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>

Grafische Darstellung

Die grafische Darstellung von @FM vermittelt ein klares Verständnis der Funktionsweise der Funktion:

0 1 2 3 4 5 6 7 8 9 10   # The universe.
|                    |    # Place fixed dividers at 0, 10.
|   |     |       |  |    # Add 4 - 1 randomly chosen dividers in [1, 9]
a    b      c    d        # Compute the 4 differences: 2 3 4 1

Fazit

Diese ausgefeilte Lösung basiert auf Die eingeschränkte Summenstichprobe bietet eine robuste und unvoreingenommene Methode zum Generieren von Zufallszahlen, deren Summe einen vordefinierten Wert ergibt. Es gewährleistet die gleiche Wahrscheinlichkeit für alle möglichen Ergebnisse und ist somit ein zuverlässiges Werkzeug für verschiedene Programmierszenarien.

Das obige ist der detaillierte Inhalt vonWie generiert man Zufallszahlen mit einer vordefinierten Summe und stellt eine gleiche Wahrscheinlichkeitsverteilung sicher?. 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