Wenn eine Variable die Werte ihres Definitionsbereiches zufällig annimmt, sprechen wir von einer Zufallsvariablen.
Wichtig in Simulationen, Spielen und randomisierten Algorithmen sind Zufallsvariablen, bei denen die Verteilung der einzelnen Werte
bekannt ist, d. h., bei denen wir die Wahrscheinlichkeit kennen, mit
der die Variable einen bestimmten Wert annimmt. Ein Beispiel dafür
haben wir schon in Abschnitt 2.5.1 gesehen. Dort
haben wir mit Hilfe der Klasse random_source
einen gerechten Würfel simuliert, d. h. einen Würfel, dessen einzelne
Augenzahlen alle mit derselben Wahrscheinlichkeit von 1/6 fallen.
Die
Variable „Augenzahl“ ist eine gleichverteilte
Zufallsvariable.
Die Klasse random_source dient zum Erzeugen
gleichverteilter Zufallsvariablen.[25]
Was aber, wenn die Werte der Variablen nicht
gleichverteilt sind? Wenn es sich etwa um einen gezinkten Würfel
handelt, bei dem die Augenzahl „6“ häufiger fällt
als die anderen Zahlen? Für solche nicht-gleichverteilten
Zufallsvariablen hält LEDA die Klassen
random_variate und
dynamic_random_variate bereit.
random_variate dient zum Erzeugen
von Zufallswerten, deren Verteilung sich nicht ändert und im
Voraus bekannt
ist. Mit dynamic_random_variate
dagegen können Zufallswerte erzeugt werden, deren Verteilung sich während des Programmlaufes ändert.
[25] Um einen anderen
Wertebereich W als das von random_source
erzeugte ganzzahlige Intervall I zu erhalten, können wir z. B. die aus
I erzeugten Werte als Indizes eines Arrays benutzen, das die
gewünschten Zufallswerte W enthält. So können beliebige, auch
nicht-ganzzahlige Zufallswerte (mit gleicher Wahrscheinlichkeit)
erzeugt werden.