AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

1,2,3,4,5,6 - Reihenfolgen

Ein Thema von Gast · begonnen am 21. Jul 2003 · letzter Beitrag vom 23. Jul 2003
Antwort Antwort
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#1

Re: 1,2,3,4,5,6 - Reihenfolgen

  Alt 22. Jul 2003, 20:10
Hi

Hier mal meine Lösung

Delphi-Quellcode:
procedure Combi(const Value: String; List: TStrings);

  procedure DoCombi(Pattern,Pos,Stop: PChar);
  // Erzeuge alle Kombinationen ohne Duplikate (Permutationen) aus Pattern von der
  // Zeichenposition Pos angefangen bis zur Zeichenposition Stop.
  // Pattern muß alpha. sortiert sein.
  // 'AABCDEEXYZ' ist korrekt, aber 'KABA..' ist falsch.
  // Pattern enthält nach Rückkehr von DoCombi() wieder die ursprüngliche
  // Sortierung, wird aber während der Rekursion modifiziert.
  // Die Kombinationen werden alpha. aufsteigend enumeriert.
  var
    Cur: PChar;
    Tmp,Last: Char;
  begin
    if Pos >= Stop then
    begin
      List.Add(Pattern);
      Exit;
    end;
    Last := #0;
    Cur := Pos;
    while Cur <= Stop do
    begin
      Tmp := Cur^; Cur^ := Pos^; Pos^ := Tmp;
      if Tmp > Last then
      // verhindere Duplikate !
      // Falls alle Kombinationen, inklusive Duplikate enumeriert werden sollen
      // muß diese Abfrage entfernt werden. Die Restriktion der alpha. Sortierung
      // ist dann auch nicht mehr erforderlich.
      begin
        DoCombi(Pattern, Pos +1, Stop);
        Last := Tmp;
      end;
      Inc(Cur);
    end;
    Tmp := Pos^;
    while Pos < Stop do
    begin
      Pos^ := Pos[1];
      Inc(Pos);
    end;
    Pos^ := Tmp;
  end;

var
  Temp: String;
begin
  Temp := Value;
  UniqueString(Temp);
  DoCombi(@Temp[1], @Temp[1], @Temp[Length(Temp)]);
end;

procedure Test;
var
  List: TStringList;
begin
  List := TStringList.Create;
  try
    Combi('123456', List);
    WriteLn(List.Text);
  finally
    List.Free;
  end;
end;
Sie ist ein bischen weniger aufwendig und arbeitet inplaced.

Oder hier Kombination und Permutation von Strings/Integern

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 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