![]() |
Re: Keine doppelten Zufallszahlen mehr
Jetzt ist meine Variante im Vorteil :mrgreen: :
Delphi-Quellcode:
(EInvalidArguement ist in "Math" deklariert)
procedure RandomArray(var AArray: array of Integer; const AStart, AStep, ACount: Integer);
var List: TList; i, Index: Integer; begin if ACount < Length(AArray) then raise EInvalidArgument.Create('ACount muss größer/gleich der Länge von AArray sein'); List := TList.Create; try i := AStart; repeat // erst alle Werte in die Liste packen, ... List.Add(Pointer(i)); Inc(i, AStep); until i = AStart + AStep * ACount; for i := Low(AArray) to High(AArray) do // ...dann zufällig einen rauspicken begin Index := Random(List.Count); AArray[i] := Integer(List.Items[Index]); List.Delete(Index); end; finally List.Free; end; end; Falls niemand wieder einen Super-Algorithmus vorlegt, werde ich diesen Code morgen in den Library-Thread posten :wink: . |
Re: Keine doppelten Zufallszahlen mehr
@Khabarakh: Deine Methode hat den Nachteil, dass die Werte immer denselben Abstand haben, also nicht wirkliche Zufallszahlen zwischen 1 und 100 sind, sondern z.B. 12, 22, 32, 42 usw.
Der Algorithmus von alzaimar war IMHO besser, allerdings hat er die Veränderung an der falschen Stelle eingebaut.
Delphi-Quellcode:
Const
Count = 100; // <-- hier 100 Var A : Array[0..Count-1] of Integer; I, J, T : Integer; begin For I := 0 to Count-1 do A[I] := I; // <-- hier lassen For I := 0 to Count-1 do begin J := I+random(Count-I); T := A[J]; A[J] := A[I]; A[I] := T; end; // und dann einfach nur die ersten 10 Elemente aus dem Array nehmen! end; |
Re: Keine doppelten Zufallszahlen mehr
@alzaimar: deine variante funzt eh
Zitat:
|
Re: Keine doppelten Zufallszahlen mehr
@Khabarakh: Deine Version verwendet zu viele Klassen (äh, Eine :zwinker:) Bäh
@Flocke: Gut gesehen Fazit: Flockes Modifizierung liefert den schnellsten Algorithmus, da O(n). Meiner und der von Khabarakh sind O(n^2). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz