Backtracking

Image
Zpětná stopa funguje na principu hloubkového prvního vyhledávání

Pojem resetovací procedura nebo backtracking popisuje metodu řešení problému v rámci algoritmů .

Obecný algoritmus

Backtracking je založen na principu pokusů a omylů , což znamená, že je učiněn pokus vyvinout dílčí řešení do celkového řešení. Pokud lze předvídat, že částečné řešení nemůže vést ke konečnému řešení, provede se poslední krok nebo poslední kroky a místo toho se vyzkouší alternativní přístupy. Tím je zajištěno, že lze vyzkoušet všechna možná řešení (princip vlákna Ariadne ). S algoritmy zpětného sledování je buď nalezeno existující řešení (pravděpodobně po velmi dlouhém běhu), nebo lze definitivně konstatovat, že žádné řešení neexistuje. Backtracking je obvykle nejsnadnější implementovat rekurzivně a jedná se o typický případ použití rekurze.

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!

Časová složitost

V případě hledání první hloubky se uzly rozšíří z každého dílčího řešení a strom řešení s maximální hloubkou, v nejhorším případě uzly s maximální možnou větví .

Pátrání do hloubky, a tedy i ustupování mají k exponenciálnímu dobu běhu v nejhorším případě se a jedním stupněm větvení . Čím větší je hloubka hledání , tím déle bude trvat nalezení řešení. Proto je zpětné sledování primárně vhodné pro problémy s malým stromem řešení.

Existují však metody, pomocí kterých lze snížit časovou složitost algoritmu zpětného sledování. Mezi ně patří mimo jiné:

  • Heuristika
  • Přijetí přibližných řešení a odolnost proti chybám
  • Průměrné vstupní množství

Příklady

Mezi známé problémy, které lze vyřešit pomocí zpětného sledování, patří:

Dámský problém
Image
Řešení problému žen pomocí zpětného sledování
K dispozici je šachovnice s poli (každý sloupec a řádek). Nyní postavte ženy tak, aby se nemohly navzájem bít. Dámský problém patří do třídy problémů s uspokojením omezení .
Problém s propojkou
Dána je šachovnice s čtverci. Skokan může mít různé skoky z určité polohy , pokud tyto nepovedou přes okraj desky. Hledáme cestu, ve které jsou všechna pole navštěvována přesně jednou (Springerweg). Pomocí zpětného sledování lze systematicky vyzkoušet všechny možné cesty. Tah je platný, pokud je nové pole v hracím poli a ještě není navštíveno. Existují však mnohem efektivnější metody řešení tohoto problému.
Problém s batohem
Batoh s kapacitou je uveden . Dále jsou objektům dány hodnoty a váhy. Nyní by měly být vybrány objekty, které se zvyšují na maximální hodnotu, ale jejichž celková hmotnost nepřesahuje nosnost batohu.
Problém s barvením
Je uvedena mapa se zeměmi, které by měly být vybarveny různými barvami. Hledáme barevnou kombinaci, ve které jsou všechny země, které mají společnou hranici, barevně odlišeny.
Desková hra solitaire
Na začátku je na desce 32 kamenů (pera nebo koule); jeden z nich je odstraněn v 31 tazích skokem přes něj jiným kamenem.
Sudoku
Čísla od 1 do 9 by měla být zadána do pole (rozděleného do devíti polí) podle určitých pravidel .
Str8ts
Čísla od 1 do 9 by měla být zadána do pole podle určitých pravidel . Tento typ skládačky lze také dobře vyřešit pomocí zpětného sledování.
Hledejte z bodu A do bodu B v grafu
Zpětná stopa se také používá k hledání trasy z bodu A do bodu B v grafu, například k vyhledání spojení v jízdním řádu nebo k určení trasy v plánovači tras nebo trase bludištěm .

Mnoho z těchto problémů je NP-úplné .

prolog

Programovací jazyk Prolog využívá ustupování ke generování odpovědí. Tlumočník po sobě zkouší všechny možné důkazy. Rozhodovací body se označují jako výběrové body . K !vyřazení vybraných bodů lze použít takzvaný operátor řezu .

literatura

webové odkazy

Commons : Backtracking  - sbírka obrázků, videí a zvukových souborů