Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Backtracking

Der Begriff Rücksetzverfahren oder englisch Backtracking (Rückverfolgung) bezeichnet eine Problemlösungsmethode innerhalb der Algorithmik.

Inhalt5 Abschnitte
  1. 1. Grundidee und Bedeutung
  2. 2. Ablauf des Verfahrens
  3. 3. Laufzeit und Grenzen
  4. 4. Typische Anwendungen
  5. 5. Backtracking in Prolog

Grundidee und Bedeutung

Backtracking, auf Deutsch Rücksetzverfahren oder Rückverfolgung, ist eine Problemlösungsmethode der Algorithmik. Es arbeitet nach dem Prinzip der Tiefensuche und nach Versuch und Irrtum („trial and error“): Eine Teillösung wird schrittweise erweitert, bis entweder eine vollständige Lösung entsteht oder erkennbar wird, dass der eingeschlagene Weg nicht zum Ziel führen kann.

Führt eine Wahl in eine Sackgasse, nimmt der Algorithmus den letzten Schritt oder mehrere Schritte zurück und versucht eine Alternative. Dadurch lassen sich systematisch alle infrage kommenden Lösungswege untersuchen. Dieses Vorgehen entspricht dem Prinzip des Ariadnefadens. Der Algorithmus findet eine vorhandene Lösung – möglicherweise erst nach sehr langer Laufzeit – oder stellt eindeutig fest, dass keine Lösung existiert.

Backtracking wird meist rekursiv umgesetzt. Rekursion bedeutet hier, dass die Suchfunktion sich selbst für die jeweils nächste Stufe des Lösungswegs aufruft.

Ablauf des Verfahrens

Der allgemeine Ablauf verwendet einen Vektor, der die bisher gewählten Teilschritte enthält:

  • Solange noch nicht ausprobierte Teillösungsschritte vorhanden sind, wird ein neuer Schritt ausgewählt.
  • Ist diese Wahl gültig, wird sie dem Vektor hinzugefügt.
  • Ist der Vektor damit vollständig, wurde eine Lösung gefunden und die Funktion gibt „true“ zurück.
  • Ist er noch nicht vollständig, wird die Suche rekursiv auf der nächsten Stufe fortgesetzt.
  • Führt die Fortsetzung zu keiner Lösung, wird die letzte Wahl rückgängig gemacht. Anschließend wird eine andere Möglichkeit geprüft.
  • Sind keine weiteren Teillösungsschritte vorhanden, gibt die Funktion „false“ zurück. Auf diesem Weg existiert dann keine Lösung.

Der Algorithmus baut somit einen Lösungsbaum auf: Jeder Knoten steht für eine Teillösung, jede Verzweigung für eine mögliche nächste Wahl und jede Sackgasse für einen Weg, der zurückgenommen werden muss.

Laufzeit und Grenzen

Bei maximal z möglichen Verzweigungen von jeder Teillösung aus und einer maximalen Tiefe N des Lösungsbaums werden im schlechtesten Fall 1 + z + z² + z³ + … + zᴺ Knoten erweitert. Für einen Verzweigungsgrad z > 1 ergibt sich die exponentielle Zeitkomplexität O(zᴺ).

Mit wachsender Suchtiefe dauert die Lösungssuche daher stark länger. Backtracking eignet sich vor allem für Probleme mit einem kleinen Lösungsbaum. Die Zeitkomplexität kann unter anderem durch Heuristiken, durch die Akzeptanz von Näherungslösungen und Fehlertoleranz sowie unter Berücksichtigung der durchschnittlichen Eingabemenge verringert werden.

Typische Anwendungen

Viele mit Backtracking lösbare Aufgaben sind Constraint-Satisfaction-Probleme, also Probleme, bei denen eine Belegung bestimmte Bedingungen erfüllen muss. Viele der genannten Probleme sind NP-vollständig.

Beim Damenproblem sollen auf einem Schachbrett mit n × n Feldern N Damen so angeordnet werden, dass keine Dame eine andere schlagen kann. Der Algorithmus setzt schrittweise Damen ein und nimmt eine Platzierung zurück, sobald sie keine gültige Gesamtlösung mehr zulässt.

Beim Springerproblem besitzt ein Schachbrett m × n Felder. Ein Springer kann von einer Position aus N = 8 verschiedene Sprünge ausführen, sofern sie nicht über den Brettrand führen. Gesucht wird ein Springerweg, der jedes Feld genau einmal besucht. Ein Zug gilt als gültig, wenn das Zielfeld innerhalb des Bretts liegt und noch nicht besucht wurde. Backtracking kann alle Wege systematisch prüfen, allerdings gibt es für dieses Problem deutlich effizientere Verfahren.

Beim Rucksackproblem sind ein Rucksack mit Tragfähigkeit B sowie N Gegenstände mit Werten und Gewichten gegeben. Gesucht ist eine Auswahl mit maximalem Gesamtwert, deren Gesamtgewicht B nicht überschreitet. Beim Färbeproblem sollen B Länder mit N Farben so eingefärbt werden, dass Länder mit gemeinsamer Grenze unterschiedliche Farben erhalten.

Weitere Anwendungen sind das Solitär-Brettspiel, bei dem von anfangs 32 Steinen in 31 Zügen jeweils einer durch Überspringen entfernt wird, sowie Sudoku und Str8ts. Bei beiden Rätseltypen werden die Zahlen 1 bis 9 nach bestimmten Regeln in ein 9 × 9-Feld eingetragen; beim Sudoku ist dieses zusätzlich in neun 3 × 3-Felder unterteilt. Backtracking kann außerdem Wege von A nach B in einem Graphen suchen, etwa Verbindungen in einem Fahrplan, Routen in einem Routenplaner oder Wege durch ein Labyrinth.

Backtracking in Prolog

Die Programmiersprache Prolog verwendet Backtracking zur Erzeugung von Antworten. Der Interpreter probiert dazu die möglichen Beweise der Reihe nach aus. Stellen, an denen alternative Fortsetzungen möglich sind, heißen Choice Points, also Entscheidungspunkte. Der Cut-Operator ! kann verwendet werden, um solche Choice Points zu verwerfen und damit bestimmte alternative Suchwege auszuschließen.

Weiterlesen

Algorithmus Algorithmen bestehen aus endlich vielen, wohldefinierten Einzelschritten. ... Damit können sie zur Ausführung in ein Computerprogramm implementiert, aber auch in … Rekursion Als Rekursion (lateinisch recurrere ‚zurücklaufen') wird ein prinzipiell unendlicher Vorgang bezeichnet, der sich selbst als Teil enthält oder mithilfe von sich … Tiefensuche Tiefensuche (englisch depth-first search, DFS) ist in der Informatik ein Verfahren zum Suchen von Knoten in einem Graphen. Sie zählt zu den uninformierten … Laufzeit (Informatik) Der Begriff Laufzeit (englisch runtime) beschreibt in der Informatik einerseits die Zeitdauer, die ein Programm, ausgeführt durch einen Rechner, … Zeitkomplexität Unter der Zeitkomplexität wird in der Informatik die Anzahl der ... Bubblesort zwar für große Datenmengen ein recht langsames Verfahren, eignet … Pathfinding Pathfinding bzw. Wegfindung ist in der Informatik die algorithmengestützte Suche nach dem oder den optimalen Wegen (englisch path – Pfad) von einem … Graph (Graphentheorie) Ein Graph ist in der Graphentheorie eine abstrakte Struktur, die eine Menge von Objekten zusammen mit den zwischen diesen Objekten bestehenden Verbindungen … NP-Vollständigkeit In der Informatik bezeichnet man ein Problem als NP-vollständig (vollständig für die Klasse der Probleme, die sich nichtdeterministisch in Polynomialzeit … Prolog (Programmiersprache) Prolog (vom Französischen: programmation en logique, deutsch: „Programmieren in Logik“) ist eine Programmiersprache, die Anfang der 1970er Jahre maßgeblich … Robert Sedgewick (Informatiker) Sedgewick wurde 1975 bei Donald Knuth an der Stanford University mit einer Arbeit über Quicksort promoviert. Danach war er bis 1985 an der Brown University … Niklaus Wirth Dabei erweiterte er auch die formale Sprache Backus-Naur-Form (BNF), die zur Notation der Syntax von Algol 60 eingesetzt wurde, zur Erweiterten Backus-Naur …