„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie generiert man Zufallszahlen, die mit gleicher Wahrscheinlichkeit einen vordefinierten Wert ergeben?

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

Veröffentlicht am 08.11.2024
Durchsuche:400

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 möchten 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. Dieser Ansatz begünstigt jedoch die erste generierte Zahl hinsichtlich ihres Beitrags zur Summe.

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

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

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 Ganzzahlen zu ermöglichen, ist eine Modifikation verfügbar:

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

Indem wir jeden Wert um eins erhöhen, können wir eine Liste nicht negativer Ganzzahlen generieren, 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, die gleiche Wahrscheinlichkeit hat, generiert 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3