Autor Beitrag
Timelesk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 82


Delphi 2006 Prof
BeitragVerfasst: Mo 03.07.06 17:21 
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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  //Zufallsauflistung generieren
  sl := TStringlist.Create;
  SetLength(route, anz_max);  //route: Array of Integer, anz_max: Integer
  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
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 03.07.06 17:30 
Moin!

Guckst du! ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Timelesk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 82


Delphi 2006 Prof
BeitragVerfasst: Mo 03.07.06 19:55 
vielen dank,
bin über die suche leider net drüber gestolpert!
aber funktioniert einwandfrei!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 03.07.06 22:57 
Moin!

Wenn dein Problem gelöst ist, markierst du den Thread dann noch entsprechend? Danke. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Mi 05.07.06 14:46 
Hi,

wurde hier auch schonmal behandelt und is eigentlich besser als dieses "Durchschuetteln"

www.delphi-forum.de/...hlight=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

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.