Gewichtete Zufallszahlen generieren
Bei der gewichteten Zufallszahlengenerierung wird eine Zufallszahl aus einem Bereich ausgewählt, in dem die Wahrscheinlichkeit jeder Zahl durch a bestimmt wird Gewicht. Diese Aufgabe stellt sich in verschiedenen Anwendungen wie Simulationen und Spielen.
Erste Lösung
Ein gängiger Ansatz ist die Ausschlussstichprobe, wie im Beispiel dargestellt bereitgestellter ColdFusion-Code. Bei dieser Methode wird eine Nachschlagetabelle mit Elementen erstellt, die entsprechend ihrer Gewichtung verteilt sind. Dieser Ansatz weist jedoch Einschränkungen auf, wie z. B. den linearen Mehraufwand beim Erstellen der Tabelle und potenzielle Speicherverbrauchsprobleme.
Alternative Strategien
Implementierung
Eine Implementierung von gewichtetem Zufall Zahlengenerierung in JavaScript mittels Alias-Sampling:
function weightedRand(weights) { // Build the alias table let table = []; let totalWeight = 0; for (let i = 0; i < weights.length; i++) { totalWeight += weights[i]; } for (let i = 0; i < weights.length; i++) { let prob = weights[i] / totalWeight; let alias = i; table.push({ prob: prob, alias: alias }); } // Generate a random number return function() { let r = Math.random() * totalWeight; let i = 0; let alias = -1; while (i < table.length && alias === -1) { if (r < table[i].prob) { alias = i; } else { r -= table[i].prob; i = table[i].alias; } } return alias; } }
Das obige ist der detaillierte Inhalt vonWie kann die Generierung gewichteter Zufallszahlen effizienter gestaltet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!