Remove ads
Problemlösungsmethode innerhalb der Algorithmik Aus Wikipedia, der freien Enzyklopädie
Der Begriff Rücksetzverfahren oder englisch Backtracking (Rückverfolgung) bezeichnet eine Problemlösungsmethode innerhalb der Algorithmik.
Backtracking geht nach dem Versuch-und-Irrtum-Prinzip (trial and error) vor, das heißt, es wird versucht, eine erreichte Teillösung zu einer Gesamtlösung auszubauen. Wenn absehbar ist, dass eine Teillösung nicht zu einer endgültigen Lösung führen kann, wird der letzte Schritt beziehungsweise werden die letzten Schritte zurückgenommen, und es werden stattdessen alternative Wege probiert. Auf diese Weise ist sichergestellt, dass alle in Frage kommenden Lösungswege ausprobiert werden können (Prinzip des Ariadnefadens). Mit Backtracking-Algorithmen wird eine vorhandene Lösung entweder gefunden (unter Umständen nach sehr langer Laufzeit), oder es kann definitiv ausgesagt werden, dass keine Lösung existiert. Backtracking wird meistens am einfachsten rekursiv implementiert und ist ein prototypischer Anwendungsfall von Rekursion.
Funktion FindeLösung (Stufe, Vektor) 1. wiederhole, solange es noch neue Teil-Lösungsschritte gibt: a) wähle einen neuen Teil-Lösungsschritt; b) falls Wahl gültig ist: I) erweitere Vektor um Wahl; II) falls Vektor vollständig ist, return true; // Lösung gefunden! sonst: falls (FindeLösung(Stufe+1, Vektor)) return true; // Lösung! sonst mache Wahl rückgängig; // Sackgasse (Backtracking)! 2. Da es keinen neuen Teil-Lösungsschritt gibt: return false // Keine Lösung!
Bei der Tiefensuche werden bei maximal möglichen Verzweigungen von jeder Teillösung aus und einem Lösungsbaum mit maximaler Tiefe von im schlechtesten Fall Knoten erweitert.
Die Tiefensuche und somit auch Backtracking haben im schlechtesten Fall mit und einem Verzweigungsgrad eine exponentielle Laufzeit. Je größer die Suchtiefe , desto länger dauert die Suche nach einer Lösung. Daher ist das Backtracking primär für Probleme mit einem kleinen Lösungsbaum geeignet.
Es gibt jedoch Methoden, mit welchen die Zeitkomplexität eines Backtracking-Algorithmus verringert werden kann. Diese sind unter anderem:
Bekannte Probleme, die sich mit Backtracking lösen lassen, sind unter anderem:
Viele dieser Probleme sind NP-vollständig.
Die Programmiersprache Prolog benutzt Backtracking zur Antwort-Generierung. Dabei probiert der Interpreter alle Beweismöglichkeiten der Reihe nach durch. Entscheidungspunkte werden dabei als Choice Point bezeichnet. Der so genannte Cut-Operator !
kann benutzt werden, um Choice-Points zu verwerfen.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.