Angenommen, ich habe eine Liste namens elements
, von denen jede eine boolesche Eigenschaft erfüllt oder nicht erfüllt p
. Ich möchte eines der Elemente auswählen, die zufällig mit gleichmäßiger Verteilung erfüllt. Ich weiß nicht im Voraus, wie viele Artikel diese Eigenschaft erfüllen .Wählen Sie ein zufälliges Array-Element, das eine bestimmte Eigenschaft erfüllt.
Wird der folgende Code tun dies ?:
pickRandElement(elements, p)
randElement = null
count = 0
foreach element in elements
if (p(element))
count = count + 1
if (randInt(count) == 0)
randElement = element
return randElement
(randInt(n)
gibt eine Zufalls int k
mit 0 <= k < n
.)
arbeitet Ich hätte gedacht, „durch zufällige“ und „mit Gleichverteilung“ gegenseitig ausschlossen, was bin ich dabei? –
@Binary: Er bedeutet einfach, dass es eine faire Zufallszahl sein muss. Alle Elemente, die p erfüllen, müssen die gleiche Chance haben, jedes Mal zufällig ausgewählt zu werden. Wenn dies zutrifft, werden sie bei ausreichender Zeitverteilung gleichmäßig verteilt. – JoeCool
Zufallsverteilungen können alle möglichen Formen haben, die auf eine Gruppe von Elementen oder auf eine andere Gruppe gewichtet werden können. Hier fragt Paul nach einer geraden (oder gleichmäßigen) Verteilung, bei der jedes Element dieselbe Wahrscheinlichkeit hat, ausgewählt zu werden. –