Wozu braucht man Zufallszahlen?
-
Ich habe sie schon so häufig benutzt, aber jetzt fange ich einen Satz an "Zufallszahlen braucht man zum Beispiel für..." und stehe total auf dem Schlauch
Fallen euch spontan ein paar anschauliche Anwendungsbeispiele ein?
-
lottozahlengenerator, ki, simulationen, alles mögliche. programmiere was, dann wirst du irgendwann drauf kommen, dass du zufallszahlen brauchst
-
Kryptographie, Signalverarbeitung, Überwachungsfunktionen, ...
-
Ein Beispiel aus der Numerik sind Monte-Carlo-Algorithmen.
-
Sehr schön, danke erst mal
-
Zufallszahlen braucht man AFAIK rein wegen dem N|NP Problem der Informatik
-
Oder z.B. für Spiele in denen man Dinge unberechenbar machen möchte, z.B. das Verhalten der Gegner, bzw. deren Position.
Oder ganz allgemein auch für Kartenspiele bzw. "Steinchenspiele" um die Ausgangssituation zu berechnen.Weiters werden AFAIK zum Dithering im Audio Bereich Zufallszahlen verwendet.
Auch für viele Tests braucht man Zufallszahlen -- wennste z.B. ne riesengrosse Zahl testen willst ob sie Prim ist, dann brauchst du Zufallszahlen. Genauso aber wenn du andere Sachen wie z.B. Algorithmen testen willst. Nen Red-Black-Tree oder ne Sortierfunktion -- geht auch am einfachsten wenn du den Input mit einem Zufallszahlengenerator erstellst, so kann man schnell und einfach hunderte, tausende oder zigtausende Tests fahren. Und findet damit vermutlich schneller Fehler die in bestimmten seltenen Fällen auftreten als wenn man bloss ein paar Sets Eingabedaten selbst zusammentippselt.
-
Spielst du skat lieber mit gemischten oder mit sortierten Karten?
-
Ich habe ein neues Problem: Ich habe einen Zufallsgenerator geschrieben und möchte nun die Periodenlänge testen, also herausfinden, wie schnell sich die Zahlen wiederholen. Ich habe es schon mit zwei Arrays gelöst, die hintereinander folgen und die jeweils vergrößert und verglichen werden, aber ich meine es gab da eine effizientere Methode.
Kann mir da wer auf die Sprünge helfen?
-
snOOfy schrieb:
Ich habe ein neues Problem: Ich habe einen Zufallsgenerator geschrieben und möchte nun die Periodenlänge testen, also herausfinden, wie schnell sich die Zahlen wiederholen. Ich habe es schon mit zwei Arrays gelöst, die hintereinander folgen und die jeweils vergrößert und verglichen werden, aber ich meine es gab da eine effizientere Methode.
Kann mir da wer auf die Sprünge helfen?Ja, es gibt eine effizientere Methode: Zuerst siehst du die Zufallszahlen als Folge an, gibst also jeder Zahl eine Nummer, wann sie auftritt. Die Elemente dieser Folge nenne ich mal x_i.
Man kann zeigen, dass es dann ein n gibt, sodass x_n = x_{2n}. Du musst also immer nur zwei Zahlen speichern, x_i und x_{2i}. Du beginnst mit i = 1 und zählst nach oben.
Wenn du dieses n gefunden hast, weißt du, dass x_n schon in der Periode liegt. Das ist insofern wichtig, weil die Folge ja nicht von Beginn an periodisch sein muss. Die Folge "3,2,1,0,0,0,...", bei der am Ende nur noch 0 folgt, wird auch periodisch, obwohl 3, 2 und 1 nicht zur Periode gehören. Dann kannst du wieder für alle i>0 den Wert x_{n+i} ausrechnen und schauen, wann zum ersten Mal x_{n+i} = x_n gilt. Dieses i ist dann die gesuchte Periode.Im Fall eines üblichen rand() würde die Folge übrigens aus dem internen seed bestehen, denn ein Folgenglied darf, damit dieses Verfahren funktioniert, nur von dem vorhergehenden Wert abhängen.
-
Lies doch einfach mal den Artikel zu Zufallszahlen im Magazin