Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
10. Mai 2011
Je länger ich mir den Code anschaue, desto eher denke ich, dass der aus dem Stegreif geschrieben wurde und falsch ist, die Idee ist aber vorhanden :gruebel: Pauschal würde ich behaupten, dass folgendes richtig ist:
for i := High(IntArray) downto Low(IntArray) + 1 do
Swap(i, Random(i - Low(IntArray) + 1) + Low(IntArray))); // Habe "- Low(IntArray)" ergänzt
Denn sonst kann man über den...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
10. Mai 2011
Hm, habs nun doch verstanden, wie der Algo funktioniert :stupid:
@shmia: Eigentlich reicht es doch aber, bis zu Low(IntArray) + 1 zu laufen?
// Richtig (Fisher-Yates)
for i := High(IntArray) downto Low(IntArray) + 1 do
Swap(i, Random(i+1)+Low(IntArray)));
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
10. Mai 2011
Schau komplizierter aus, als ich es eigentlich haben wollte :stupid: Aber ich werde mir das heute Abend mal durchlesen, vielleicht taugt das ja wirklich was. Danke für den Tipp! Die zwei Durchgänge (also einmal das Befüllen und dann das Mixen) gefallen mir bisher nicht so wirklich. Aber ist auf jeden Fall schon mal besser als vorher!
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
10. Mai 2011
Hab hier mal den passenden Code dazu, in so fern das mal jemand anderer brauchen sollte. Habe die von himitsu genannte erste Technik verwendet, d.h. ein Array befüllt, dann durchgemixt -- zufällig versteht sich -- und dann die ersten Count Elemente ausgegeben.
function GetUniqueRandomNumbers(const Count, AFrom, ATo: Integer): TArray<Integer>; overload;
procedure Swap(var A: TArray<Integer>;...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
10. Mai 2011
Hallo zusammen,
ich habe mir gestern Abend ein Problem näher angesehen, zu dem ich keine bessere Lösung gefunden habe, als die, die hier gepostet. Aufgabe: Es sollen N Zufallszahlen generiert werden, die nich gleich sind. Hintergrund ist, dass ich aus einem Array N, zufällig ausgewählte Werte extrahieren will und da brauche ich eben verschiedene Zufallszahlen. Ja, ich weiß, man kann das...