AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein "ABCD" in allen möglichen Kombinationen

"ABCD" in allen möglichen Kombinationen

Ein Thema von -lx- · begonnen am 4. Okt 2006 · letzter Beitrag vom 10. Okt 2006
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: "ABCD" in allen möglichen Kombinationen

  Alt 4. Okt 2006, 23:17
Er spricht von einer simplem Permutation.

Achja, dazu gibt es CodeLib-Einträge.

PermutationPermutation
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
-lx-
(Gast)

n/a Beiträge
 
#12

Re: "ABCD" in allen möglichen Kombinationen

  Alt 6. Okt 2006, 19:12
Hallo,


also mir ist das Prinzip von dino noch immer nicht klar.

A B C D
A B D C
A C B D <--- wieso ? Wieso nicht A D B C ?



also mir ist der Mechanismus noch nicht klar, wie man man denn beim Vertauschen vor geht. Man kann doch nicht einfach willkürlich tauschen. Es müsste ja eig. immer schrittweise gehen - rekursiv eben.
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#13

Re: "ABCD" in allen möglichen Kombinationen

  Alt 6. Okt 2006, 19:20
Zitat von -lx-:
A B C D
A B D C
A C B D <--- wieso ? Wieso nicht A D B C ?

weil ich von links nach recht immer den kleinstmöglichsten Buchstaben nehme, dessen Kombination nch nicht vorgekommen ist
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: "ABCD" in allen möglichen Kombinationen

  Alt 6. Okt 2006, 19:37
Also, ich habe eine Liste, die ich in allen möglichen Kombinationen zusammenstellen will.
Na denn:
Code:
Erzeuge alle Permutationen (Liste L, bisherige Lösung)
Für jedes Element E in der Liste L
  Wenn E noch nicht in der bisherigen Lösung enthalten ist, dann
      Wenn E das letzte noch nicht verwendete Element der Liste ist, dann
         Ist [Lösung + E] eine Permutation
      ansonsten
         Erzeuge alle Permutationen (L, Lösung + E)
Das ist übrigens schon fast die fertige rekursive Routine. Wenn Du das verstanden hast, kannst du es auch implementieren.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
-lx-
(Gast)

n/a Beiträge
 
#15

Re: "ABCD" in allen möglichen Kombinationen

  Alt 6. Okt 2006, 23:05
Hab heute den Vater meiner Freundinn auch nochmal gefragt, wie man denn sowas anpackt. Und er hat es mir auch so erklärt, wie Dino es angesprochen hat.

Nur hab ich es bei ihm besser verstanden. Warscheinlich weil eien direkte Konversation mehr bringt als was geschriebenes. Nichst gegen euch =)


Ich danke euch für eure mühen. Ihr werden in den nächsten Postings dann meien Programmieransätze sehen !




mit freundlichen Grüßen
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: "ABCD" in allen möglichen Kombinationen

  Alt 7. Okt 2006, 02:13
Das hat mir jetzt keine Ruhe gelassen

Hier mein Quellcode:

Delphi-Quellcode:
function TForm1.Factorial(const x: Byte): Word;
begin
  if x > 1 then
    result := x * Factorial(x - 1)
  else
    result := x;
end;

procedure TForm1.CalcNextS(var s: string; const Initial: string);
var
  l: Byte; // Position linker Austauschpartner
  r: Byte; // Position rechter Austauschpartner
  i: Byte; // Laufvariable
  Done: Boolean; // für Bubblesort
  Temp: Char;
begin

  // linken Austauschpartner finden
  l := Length(s);
  repeat
    Dec(l);
  until Pos(s[l], Initial) < Pos(s[l+1], Initial);

  // rechten Austauschpartner finden
  r := l + 1;
  for i := l to Length(s) do
    if (Pos(s[i], Initial) > Pos(s[l], Initial)) and
      (Pos(s[i], Initial) < Pos(s[r], Initial)) then
        r := i;

  // austauschen
  Temp := s[l];
  s[l] := s[r];
  s[r] := Temp;

  // rechts von l der Größe nach sortieren
  if l <> Length(s) - 1 then
    repeat
      Done := True;
      for i := l+1 to Length(s) - 1 do
        if Pos(s[i], Initial) > Pos(s[i+1], Initial) then
        begin
          Temp := s[i];
          s[i] := s[i+1];
          s[i+1] := Temp;
          Done := False;
        end;
    until Done;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: string;
begin
  ListBox1.Clear;
  s := Edit1.Text;
  ListBox1.Items.Add(s);
  for i := 2 to Factorial(Length(s)) do
  begin
    CalcNextS(s, Edit1.Text);
    ListBox1.Items.Add(s);
  end;
end;
Das Wort kann aus bis zu 255 Zeichen bestehen. Ich hab allerdings noch nicht berücksichtigt, dass Buchstaben auch mehrfach vorkommen können.

Die .exe ist im Anhang
Angehängte Dateien
Dateityp: exe project1_122.exe (413,0 KB, 23x aufgerufen)
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: "ABCD" in allen möglichen Kombinationen

  Alt 7. Okt 2006, 11:49
Zitat von Cöster:
Das Wort kann aus bis zu 255 Zeichen bestehen. Ich hab allerdings noch nicht berücksichtigt, dass Buchstaben auch mehrfach vorkommen können.
Äh, nee, kann doch nur aus 12 Buchstaben/Zahlen bestehen, weil die Fakultät sonst nicht mehr in den Integerrahmen passt. Es braucht bei 8 Zeichen aber auch schon ca. 6 Sekunden, bei 9 über ner Minute, ein Progressbar wär wohl angebracht.

Dass Zeichen sich wiederholen können, hab ich jetzt auch gelöst: Bevor nach Kombinationen gesucht wird, werden die Zeichen sortiert. Pro Zeichen, welches x-mal hintereinander vorkommt, wird die Anzahl der Kombinationen dann durch x! geteilt.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: "ABCD" in allen möglichen Kombinationen

  Alt 7. Okt 2006, 12:01
Genaugenommen kann ein String theoretisch bis zu 2 (oder warens 4) GiB groß sein.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#19

Re: "ABCD" in allen möglichen Kombinationen

  Alt 7. Okt 2006, 12:09
meins ist zwar nur für 7 Zeichen, aber ungefähr gleich schnell
Angehängte Dateien
Dateityp: exe kindern_561.exe (308,0 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: "ABCD" in allen möglichen Kombinationen

  Alt 7. Okt 2006, 12:15
Zitat von 3_of_8:
Genaugenommen kann ein String theoretisch bis zu 2 (oder warens 4) GiB groß sein.
Ja, aber wenn der String aus 13 verschiedenen Zeichen besteht, gibt es 13!, also 6227020800, Kombinationsmöglichkeiten. Das ist für die ListBox zu viel, die Funktion Factorioal geht auch nur bis zur Integergrenze und außerdem würde die Berechnung über 2 Wochen dauern. Bei 12 Zeichen würde es wahrscheinlich "nur" knapp über einem Tag dauern und die beiden anderen Probleme gäb's auch nicht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz