AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Aufgabe: Algorithmus eines Zauberwürfels
Thema durchsuchen
Ansicht
Themen-Optionen

Aufgabe: Algorithmus eines Zauberwürfels

Ein Thema von p0ke · begonnen am 6. Jan 2004 · letzter Beitrag vom 8. Okt 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#21

Re: Aufgabe: Algorithmus eines Zauberwürfels

  Alt 8. Okt 2006, 13:36
Zitat von Corpsman:
Die Brute Force habe ich auch mal getestet. Selbst wenn man das mit einer Heuristischen Variante Koppelt geht es nicht.
Ich würde da auch eher zu Backtracking tendieren. Und dann den Backtracking-Algorythmus so anpassen, dass er nach der besten Lösung sucht. Sollte doch hinkommen, wenn man noch die kombinatorischen Elemente einbaut, wie sie oben schon aufgezählt sind.

[OT] Aber zum Thema Backtracking stelle ich jetzt auch mal ein kleines Tutorial in Aussicht mit allgemeiner Klasse, hab alles hier, muss es nur noch vernünftig dokumentieren und abtippen.
  Mit Zitat antworten Zitat
Cöster

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

Re: Aufgabe: Algorithmus eines Zauberwürfels

  Alt 8. Okt 2006, 16:01
Zitat von Corpsman:
Sobald ich den Würfel mehr Verdreht habe ist die Rechenzeit derartig explodiert das nichts mehr ging. Zusätzlich mus man ja noch speichern wie man auf die Lösung kommt. Das hat mein 1 GB RAM Speicher dannn auch noch zerlegt.
Ließe sich das Problem nicht lösen? Ideal wäre es, wenn die Drehungsfolge an der Wegnummer ablesbar wäre.

Wenn das nicht ginge/zu kompliziert wäre:

Delphi-Quellcode:
private
  FBestWay: array of Byte; // Speicherung des bisher besten Weges
  FCurrentWay: array of Byte; // Speicherung des aktuell berechneten Weges
  function AllTried(const Way: array of Byte): Boolean; // prüft, ob alles probiert wurde
  procedure CalcWay(var Way: array of Byte); // Berechnet nächsten Weg
  function Solved(var Way: array of Byte): Boolean; // geht Drehungen durch,
                                                    // bei Lösung: verkürzt Way und gibt True zurück
{...}

implementation

procedure TForm1.btnLoesen1Click(Sender: TObject);
var
  i: Byte;
begin
  SetLength(FCurrentWay, 30);
  for i := 1 to 29 do
    FCurrentWay[i] := 1;
  FCurrentWay[30] := 0;
  repeat
    CalcWay(FCurrentWay);
    if Solved(FCurrentWay) then
    begin
      SetLength(FBestWay, Length(FCurrentWay);
      FBestWay := FCurrentWay;
    end;
  until AllTried(FCurrentWay);
end;

{...}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 06:25 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