Randomized sequence, wie? (Algorithmus gesucht)
Joerg
- programmiertechnik
Hi,
Ich suche einen Algorithmus, der mir aus einer durchgehenden Zahlenreihe - z.B. von 1 bis N - alle Zahlen in zufaelliger Folge ausgeben kann. Jede Zahl muss dabei genau 1x vorkommen (also etwa wie bei einer Ziehung von Zetteln aus einem Hut ;-)
Wie "wirklich zufaellig" die Reihe ist, spielt keine Rolle. Hintergrund ist uebrigens der Test einer Anwendung, die vielfach mit denselben Datensaetzen, aber in "halbwegs zufaelliger" Folge, gefuettert werden soll.
Ich hab zwar gegoogelt, aber ausser viel Theorie habe ich leider weder Algorithmus noch Pseudocode gefunden ...
Gruss & Dank fuer Tips,
Joerg,
#generiere Liste L mit N Zahlen
FOR i = 0 TO N-1
L[i] = i
NEXT i
#Liste Z zufällig gezogener Zahlen
FOR i = N-1 TO 0 STEP -1
generiere Zufallszahl r aus [0, i[
Z[i] = L[r] #nächste gezogene Zahl
streiche dieses Element aus der Liste L
NEXT i
Live long and prosper,
Gunnar
Hallo Gunnar,
FOR i = N-1 TO 0 STEP -1
generiere Zufallszahl r aus [0, i[
da du die Schleife mit N-1 beginnst, darfst du die Zufallszahl getrost aus [0..i] wählen. Solltest du sogar, sonst ist dein Intervall im letzten Durchlauf undefiniert: [0..0[ ergibt keinen Sinn. ;-)
Bye,
Martin
FOR i = N-1 TO 0 STEP -1
generiere Zufallszahl r aus [0, i[da du die Schleife mit N-1 beginnst, darfst du die Zufallszahl getrost aus [0..i] wählen. Solltest du sogar,
Hi Martin,
Zuerst hatte ich tatsächlich FOR i = N TO 1 STEP -1 …
So ist das, wenn man mal bei 0 und mal bei 1 anfängt zu zählen …
Live long and prosper,
Gunnar
PS. Monate fangen bei 1 an zu zählen …
PPS. Und du fragst dich jetzt sicher, ob ich noch andere Interpunktionszeichen kenne …
PS. Monate fangen bei 1 an zu zählen …
Wenn du meinst. ;-)
PPS. Und du fragst dich jetzt sicher, ob ich noch andere Interpunktionszeichen kenne …
*rofl*
Martin
Hi,
PS. Monate fangen bei 1 an zu zählen …
Unsinn, Monate fangen bei -1 zu zählen an:
Dezember 10 (Dezi ...)
November 9 (Nove ...)
Oktober 8 (Okta ...)
September 7 (Sept ...)
==>
August 6
Juli 5
Juni 4
Mai 3
April 2
März 1
Februar 0
Januar -1
;-)
cu,
Andreas
Dezember 10 (Dezi ...)
November 9 (Nove ...)
[…]
März 1
„Die Umstellung auf den gregorianischen Kalender erfolgte nicht überall zur gleichen Zeit.“ [[http://forum.de.selfhtml.org/archiv/2005/10/t117328/#m751377@title=MudGuard]]
Andreas, bei dir erfolgte sie noch gar nicht? ;-)
Live long and prosper,
Gunnar
PS. Was war eigentlich der Sinn, den Jahresanfang vom 1. März auf den 1. Januar zu verlegen?
Hi Gunnar,
FOR i = N-1 TO 0 STEP -1
generiere Zufallszahl r aus [0, i[
Z[i] = L[r] #nächste gezogene Zahl
streiche dieses Element aus der Liste L
NEXT i
Danke - das "streiche dieses Element aus der Liste" hatte ich vergessen ... die Sache mit dem Wald und den Baeumen ? ;-)
Gruss & Merci,