Angenommen, ich habe einen n-seitig geladenen Würfel, bei dem jede Seite k eine gewisse Wahrscheinlichkeit p k hat , beim Würfeln hochzukommen. Ich bin gespannt, ob es einen guten Algorithmus zum statischen Speichern dieser Informationen gibt (dh für einen festen Satz von Wahrscheinlichkeiten), damit ich einen zufälligen Würfelwurf effizient simulieren kann.
Derzeit habe ich eine O (lg n) -Lösung für dieses Problem. Die Idee ist, eine Tabelle der kumulativen Wahrscheinlichkeit der ersten k Seiten für alle k zu speichern, eine zufällige reelle Zahl im Bereich [0, 1] zu erzeugen und eine binäre Suche über die Tabelle durchzuführen, um den größten Index zu erhalten, dessen kumulativ ist Wert ist nicht größer als der gewählte Wert. Ich mag diese Lösung eher, aber es scheint seltsam, dass die Laufzeit die Wahrscheinlichkeiten nicht berücksichtigt. Insbesondere in den extremen Fällen, in denen eine Seite immer auftaucht oder die Werte gleichmäßig verteilt sind, ist es möglich, das Ergebnis des Rollens in O (1) mit einem naiven Ansatz zu generieren, obwohl meine Lösung immer noch logarithmisch viele Schritte benötigt.
Hat jemand Vorschläge, wie dieses Problem auf eine Weise gelöst werden kann, die in der Laufzeit irgendwie "anpassungsfähig" ist?
EDIT : Basierend auf den Antworten auf diese Frage habe ich einen Artikel geschrieben, der viele Ansätze für dieses Problem zusammen mit ihren Analysen beschreibt. Es sieht so aus, als ob Voses Implementierung der Alias-Methode Θ (n) Vorverarbeitungszeit und O (1) Zeit pro Würfelwurf ergibt, was wirklich beeindruckend ist. Hoffentlich ist dies eine nützliche Ergänzung zu den Informationen in den Antworten!