Zvoni
Erfahrenes Mitglied
Hallo alle,
nachdem ich in letzter Zeit öfters mal Threads gesehen habe (nicht nur hier bei Tutorials), wo Leute um Hilfe beim berühmt-berüchtigten "Lotto"-Problem bitten (x Zufallszahlen aus n Möglichen ohne doppelte Werte), habe ich mir mal das ganze Ding durch den Kopf gehen lassen (Keine Angst, ich blute nicht aus den Ohren ^^).
Mal ganz unabhängig von der verwendeten Sprache, bin ich auf folgende Idee gekommen, und wollte mal eure Meinung dazu wissen:
Algoritmus:
1) Bilde ein sortiertes Array für die n Möglichen Zahlen in der Form:
arrLotto(1)=1
arrLotto(2)=2
.
.
arrLotto(19)=19
.
.
arrLotto(49)=49
usw.
2) Hier setzt meine Idee an (btw: vielleicht ist ja meine Idee ja gar nicht so neu, aber ich habs bisher nirgends gesehen): Benutze einen Misch-Algoritmus (gibts sicher im Netz, im Prinzip das Gegenteil zu Quicksort), der die Werte des obigen Arrays durcheinander wirft. Das Ergebnis sieht dann in etwa wie folgt aus:
arrLotto(1)=17
arrLotto(2)=31
arrLotto(3)=5
usw.
3) Um jetzt beim klassischen Lotto zu bleiben (6 aus 49), würde es vollkommen ausreichen, die Werte aus den ersten 6 Elementen des Arrays auszulesen.
Ich habe in einem VB-Buch die Beschreibung eines Misch-Algoritmus gelesen, der wie folgt beschrieben wird:
Wenn ich das richtig verstanden habe, würde bei meiner Variante, im Gegensatz zur klassischen Lösungsvariante, welche ja die Zufallszahlen erzeugt, und dann prüft, ob diese bereits "gezogen" wurde, eben genau diese Prüfung entfallen, ob eine Zahl bereits gezogen wurde. Bei "6 aus 49" macht das an Speed sicher nicht viel aus, aber wie siehts bei "20.000 aus 1 Mio" aus?
Meinungen dazu?
nachdem ich in letzter Zeit öfters mal Threads gesehen habe (nicht nur hier bei Tutorials), wo Leute um Hilfe beim berühmt-berüchtigten "Lotto"-Problem bitten (x Zufallszahlen aus n Möglichen ohne doppelte Werte), habe ich mir mal das ganze Ding durch den Kopf gehen lassen (Keine Angst, ich blute nicht aus den Ohren ^^).
Mal ganz unabhängig von der verwendeten Sprache, bin ich auf folgende Idee gekommen, und wollte mal eure Meinung dazu wissen:
Algoritmus:
1) Bilde ein sortiertes Array für die n Möglichen Zahlen in der Form:
arrLotto(1)=1
arrLotto(2)=2
.
.
arrLotto(19)=19
.
.
arrLotto(49)=49
usw.
2) Hier setzt meine Idee an (btw: vielleicht ist ja meine Idee ja gar nicht so neu, aber ich habs bisher nirgends gesehen): Benutze einen Misch-Algoritmus (gibts sicher im Netz, im Prinzip das Gegenteil zu Quicksort), der die Werte des obigen Arrays durcheinander wirft. Das Ergebnis sieht dann in etwa wie folgt aus:
arrLotto(1)=17
arrLotto(2)=31
arrLotto(3)=5
usw.
3) Um jetzt beim klassischen Lotto zu bleiben (6 aus 49), würde es vollkommen ausreichen, die Werte aus den ersten 6 Elementen des Arrays auszulesen.
Ich habe in einem VB-Buch die Beschreibung eines Misch-Algoritmus gelesen, der wie folgt beschrieben wird:
The algorithm works by choosing any random element between the first and last elements and exchanging it with the last element, which then is random. Next it finds a random element between the first and the next-to-last elements and exchanges it with the next-to-last element. This process continues until the shuffling is finished.
Wenn ich das richtig verstanden habe, würde bei meiner Variante, im Gegensatz zur klassischen Lösungsvariante, welche ja die Zufallszahlen erzeugt, und dann prüft, ob diese bereits "gezogen" wurde, eben genau diese Prüfung entfallen, ob eine Zahl bereits gezogen wurde. Bei "6 aus 49" macht das an Speed sicher nicht viel aus, aber wie siehts bei "20.000 aus 1 Mio" aus?
Meinungen dazu?
Zuletzt bearbeitet: