Datenstruktur für die geladenen Würfel?

Nehme an, dass ich eine n-seitige geladen sterben, wo jede Seite k hat einige Wahrscheinlichkeit pk zu kommen, wenn ich es Rollen. Ich bin gespannt, ob es gut ist-Algorithmus für die Speicherung dieser Informationen statisch (d.h. für einen festen Satz von Wahrscheinlichkeiten), so dass ich effizient simulieren Sie eine zufällige Augenzahl.

Derzeit habe ich eine O(lg n) Lösung für dieses problem. Die Idee ist zum speichern einer Tabelle der kumulierten Wahrscheinlichkeit, dass die ersten k Seiten für alle k, Sie generiert eine zufällige reelle Zahl im Bereich [0, 1), und ausführen einer binären Suche über die Tabelle, um den größten index, deren kumulative Wert ist nicht größer als der gewählte Wert. Ich mag diese Lösung, aber es scheint seltsam, dass die Laufzeit nicht nehmen, die Wahrscheinlichkeiten berücksichtigt. Insbesondere in der extremale Fälle von einer Seite immer kommen oder die Werte gleichmäßig verteilt, ist es möglich, um das Ergebnis der roll-O(1) mit einem naiven Ansatz, obwohl meine Lösung dauert noch logarithmicallh viele Schritte.

Hat jemand irgendwelche Vorschläge, wie dieses problem zu lösen, in einer Weise, die irgendwie "adaptive" in der runtime?

BEARBEITEN: auf der Grundlage der Antworten auf diese Frage habe ich oben geschrieben ein Artikel, der viele Ansätze für dieses problem, zusammen mit Ihren Analysen. Es sieht aus wie Vose Umsetzung der alias Methode gibt Θ(n) preprocessing Zeit O(1) Zeit pro Wurf, das ist wirklich beeindruckend. Hoffentlich ist das eine sinnvolle Ergänzung zu den Informationen in den Antworten!

  • Es ist vernünftig, dass es einen O(1) - Lösung für jeden spezifischen Fall.
Schreibe einen Kommentar