Algorytmy z powrotami

https://en.wikipedia.org/wiki/Backtracking

https://en.wikipedia.org/wiki/Stable_marriage_problem (Gale, Shapley, 1962)

WPROWADZENIE

Algorytmy z powrotami (ang. backtracking) są algorytmami rekurencyjnymi. Szukamy algorytmów poszukujących rozwiązań dla specyficznych problemów metodą prób i błędów. Zwykle stosowanym tu sposobem jest podział rozwiązywanego zadania na podzadania. Dla takich zadań często najbardziej naturalnym opisem jest opis rekurencyjny.

Cały proces rozwiązywania problemu można potraktować jako proces poszukiwań w drzewie podzadań. Zwykle drzewo podzadań rośnie bardzo szybko (wykładniczo) i równie szybko rośnie ilość pracy związana z przeglądaniem drzewa. Najczęściej drzewo można stopniowo obcinać stosując reguły heurystyczne, co pozwala zredukować obliczenia. Algorytmy z powrotami uzyskały znaczenie prawie wyłącznie dzięki maszynom cyfrowym, które mogą cierpliwie i dokładnie sprawdzać ogromną liczbę wariantów.

Wirth omawia ogólne zasady podziału zadań, związanych z rozwiązywaniem pewnej klasy problemów, na podzadania oraz możliwości stosowania rekurencji. Kod może być zorganizowany na kilka sposobów.

Cechy charakterystyczne algorytmów z powrotami:

Algorytm z powrotami jest właściwie metaheurystyką niż specyficznym algorytmem. Użytkownik musi określić problem do rozwiązania, naturę częściowego rozwiązania i jak należy częściowe rozwiązanie uzupełniać w celu otrzymania pełnego rozwiązania. W przeciwieństwie do wielu innych mataheurystyk, mamy tu gwarancję znalezienia wszystkich rozwiązań w ograniczonym zakresie czasu.

Wybrane problemy rozwiązywane za pomocą algorytmów z powrotami: