2.5. Zufallszahlen (Klasse random_source)

Lernziele

Die Klasse random_source

(Pseudo-)Zufallszahlen spielen eine wichtige Rolle in vielen Simulationen, Spielen und nicht zuletzt randomisierten Algorithmen, also Algorithmen, deren Effizienz sich auf zufälligen Entscheidungen gründet.

Wenn wir von Pseudozufallszahlen sprechen, so tragen wir damit dem Umstand Rechnung, dass eine deterministische Rechenmaschine, wie sie unser Rechner nun einmal ist, niemals etwas wirklich Zufälliges erzeugen kann. Sie besteht nur aus endlich vielen Bits, hat daher nur endlich viele Konfigurationen und muss daher nach endlich vielen Rechenschritten wieder in eine Konfiguration kommen, in der sie schon einmal war.[24] Ab diesem Zeitpunkt wiederholt sich ihre Ausgabe; diese ist somit nicht „zufällig“, sondern deterministisch.

Darüber hinaus ist es sehr schwer, mathematisch exakt zu definieren, was „Zufall“ eigentlich genau ist. Auf diese Diskussion wollen wir hier nicht eingehen. Der interessierte Leser kann dies in [6] nachlesen.

Wenn wir daher im Folgenden von Zufallszahlen sprechen, so meinen wir damit eigentlich Pseudozufallszahlen. Von diesen verlangen wir nicht, dass sie im mathematischen Sinne zufällig sind, sondern vielmehr, dass sie gewissen statistischen Kriterien genügen, etwa dass bei vorgegebenem Intervall jede (ganze) Zahl daraus mit gleicher Häufigkeit erzeugt wird.

LEDA besitzt eine Klasse random_source („zufällige Quelle“) zum besonders komfortablen Erzeugen von Zufallszahlen. Diese werden wir in diesem Abschnitt kennen lernen. Damit können ganze, zufällige Zahlen aus einem bestimmten Intervall („ganzzahliger Modus“) oder auch zufällige Bitstrings einer vorher festgelegten Länge („Bit-Modus“) erzeugt werden.



[24] Wir gehen hier von einer endlichen Eingabe aus, die im voraus feststeht. Es ist also nicht so, dass der Benutzer während des Programmlaufes beliebig oft zufällige Werte eingeben darf.