Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zufallsliste Zahlen 1-x erstellen
Timelesk - Mo 03.07.06 17:21
Titel: Zufallsliste Zahlen 1-x erstellen
Hallo,
ich muss für ein Programm eine Zufallsliste an Zahlen von 1 - X erstellen!
Dabei sollte jede Zahl nur 1x vorkommen, dafür aber jede!
Das ganze wird in einem aufsteigenden Array gespeichert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| sl := TStringlist.Create; SetLength(route, anz_max); i := 0; repeat r := random(anz_max); if sl.IndexOf(inttostr(r)) = -1 then begin sl.Add(inttostr(r)); route[i] := r; inc(i); end; until i = anz_max; sl.Free; |
Durch die Stringlist wird ja somit überprüft, ob die Zahl schon existiert!
Aber mir erscheint das ganze irgendwie "unsauber" gecodet! Gerade durch die Stringlist!
Mein 2. Problem wäre, wenn die maximale Zahl z.B. > 100 wird! Dann würde es aus der Überlegung heraus vorkommen können, dass er teilweise 2-3 Sekunden braucht, bis er die Liste erstellt hat.
Gibt es hierfür eine elegantere Lösung?
Vielen herzlichen Dank
gruß
Timelesk
Timelesk - Mo 03.07.06 19:55
vielen dank,
bin über die suche leider net drüber gestolpert!
aber funktioniert einwandfrei!
Narses - Mo 03.07.06 22:57
Moin!
Wenn dein Problem gelöst ist, markierst du den Thread dann noch entsprechend? Danke. ;)
cu
Narses
catweasel - Mi 05.07.06 14:46
Hi,
wurde hier auch schonmal behandelt und is eigentlich besser als dieses "Durchschuetteln"
http://www.delphi-forum.de/viewtopic.php?t=20163&highlight=zufallszahlen
Is schon laenger her, aber das Ergebnis produziert diese Liste ohne jeden Vergleich.
Die Idee mit der Stringlist liegt im Prinzip auch hier zugrunde, nur dass der "numberspace" fuer die Randomfunktion konstant abnimmt und gezogene Elemente im Array nach hinten wandern.
Der Unterschied zum "Durchschuetteln" ist, das selbst wenn random(x) bei jedem Aufruf den gleichen Wert liefert, lediglich die Orginalfolge abgebildet wird (ist ja immerhin eine der vielen legitimem Moeglichkeinten).
Das "zufallisieren" von n Zahlen benoetigt exakt n Iterationen. Kein best- oder worst case... Einfach lineare Laufzeit....
(Is doch dann linear, oder... Keine mich mit Komplexitaetstheorie nich so gut aus)... :-)
Cheers :-)
Catweasel
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!