„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 generiere ich zufällige Zahlen mit festen Summen, um eine einheitliche Verteilung zu gewährleisten?

Wie generiere ich zufällige Zahlen mit festen Summen, um eine einheitliche Verteilung zu gewährleisten?

Gepostet am 2025-04-19
Durchsuche:230

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

generieren zufällige Nummern mit einer festen Summe

Die Herausforderung besteht darin, eine Reihe von Pseudo-Random-Zahlen zu generieren, deren Sum einen vordefinierten Wert entspricht. Insbesondere wie man vier Zahlen generiert, die, wenn sie zusammengefügt wurden, gleich 40.

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 zur Aufteilung des vordefinierten Werts in kleinere Segmente unter Verwendung zufällig ausgewählter Trenner.

Angenommen, wir haben vier zufällige positive ganze Zahlen (e, f, g und h), so dass 0



A = E
abgeben können. f

d = 40 - g

Diese Technik garantiert eine gleiche Wahrscheinlichkeit für jede Reihe von Zahlen, um eine einheitliche Verteilung zu gewährleisten. Die resultierenden Zufallsnummern erfüllen die Anforderung, zum vordefinierten Wert zu summieren.

, um dieses Konzept zu erweitern defonted_sum_sample_pos (n, insgesamt): "" "Geben eine zufällig ausgewählte Liste von N -positiven Ganzzahlen zurück, die zu Total summieren. Jede solche Liste tritt ebenso wahrscheinlich auf. "" "" Teiler = sortiert (zufällig.Sample (Bereich (1, Gesamt), n - 1)) return [a - b für a, b in ZIP (Teiler [Gesamt], [0] Trenner)]
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)]

defonted_summagel_nonneg (n, Total): "" "Geben eine zufällig ausgewählte Liste von n nichtnegativen Ganzzahlen zurück, die zu insgesamt summieren. Jede solche Liste tritt ebenso wahrscheinlich auf. "" "" return [x - 1 für x in conneimed_sum_sample_pos (n, Gesamt n)]

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