![]() |
Permutationen erzeugen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich habe aus Eigenbedarf eine kurze Funktion geschrieben, um Permutationen zu erzeugen. Also eigentlich sind es zwei: bei der einen einen sind die Elemente Chars, bei der anderen Strings. Beispiel: will man aus 123 die Werte 123,132,213,231,... machen, so ist Funktion 1 richtig möchte man dagegen aus AB,CD,EF die Werte AB,CD,EF; AB,EF,CD; CD,AB,EF; CD,EF,AB;... machen, so ist Funktion 2 richtig... Die einzige Methode die ich bisher gesehn hab für die zweite ist von Hagen in der CodeLib...mit Sicherheit deutlich schneller :) aber erstens glaube ich, das für viele eine StringList deutlich einfacher zu handhaben ist, und zum zweiten ist mein Quellcode deutlich kürzer und daher für viele etwas besser verständlich :) Die Erste nimmt als Parameter einen String mit den Werten, und gibt eine StringList zurück.
Delphi-Quellcode:
Die Zweite nimmt als Parameter eine StringList mit den Werten, und gibt einen Array of TStringList zurück.
type
TSL = TStringList; TSLArr = array of TSL; procedure Permute(var Lst: TStringList; const Vals: string; const Akt: string); var i: Integer; S: string; begin if Length(Vals) = 0 then Lst.Add(Akt) //Permutation fertig else for i := 1 to Length(Vals) do begin S := Vals; Delete(S, i, 1); Permute(Lst, S, Akt + Vals[i]); end; end;
Delphi-Quellcode:
prinzipiell genau das selbe Raster....
procedure PermuteExt(var Lst: TSLArr; const Vals: TSL; const Akt: TSL);
var i: Integer; V, A: TSL; begin if Vals.Count = 0 then begin SetLength(Lst, Length(Lst) + 1); Lst[Length(Lst) - 1] := TStringList.Create; Lst[Length(Lst) - 1].AddStrings(Akt); end else begin V := TSL.Create; A := TSL.Create; for i := 0 to Vals.Count - 1 do begin A.Clear; A.AddStrings(Akt); A.Add(Vals[i]); V.Clear; V.AddStrings(Vals); V.Delete(i); PermuteExt(Lst, V, A); end; V.Free; A.Free; end; end; ein Beispiel-Projekt gibt es auch noch dazu (nicht beschweren, Halt mal so schnell gemacht :) ) [edit=Matze]Code formatiert. Mfg, Matze[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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