Wprowadzenie do kombinatoryki algorytmicznej
Wojciech Rytter ∗
Skrypt ten zawiera szereg krótkich esejów opisujących proste, ale ciekawe algorytmy wielomianowe dla proble- mów związanych z generacją, zliczaniem lub obliczaniem elementarnych obiektów kombinatorycznych, których ilość jest z reguły wykładnicza. Inaczej mówiąc przedstawimy szereg małych zwycięskich potyczek z eksplozją kombinatoryczną.
1 Grafy związane z wieżami Hanoi
Mamy n krążków (każdy o innym rozmiarze) na trzech wieżach. Początkowo wszystkie leżą na jednej wieży, w kolejności od największego u dołu do największego u góry. Trzeba je przełożyć na jakąś inną wieżę, ale nie można stawiać większego krążka na mniejszym.
Ustalmy przykładowo, że n = 3. Konfiguracja to trójka (a 1 , a 2 , a 3 ), oznaczająca położenie tych trzech krążków (a i ∈ {1, 2, 3} dla i = 1 . . . n). Niech początkowa konfiguracja będzie (1, 1, 1) (lub krócej 1 + ) a końcowa (3, 3, 3) (lub 3 + ).
Budujemy graf H 3 = (V, E), gdzie V – zbiór konfiguracji, krawędzie nieskierowane to dozwolone ruchy.
Widać, że graf ma 3 n wierzchołków dla dowolnego n. Problem: znaleźć najkrótszą ścieżkę z konfiguracji początkowej do końcowej. Grafy H n mają podobną strukturę jak trójkąty Sierpińskiego, powstające przez usunięcie z trójkąta Pascala elementów podzielnych przez 2.
Początkowe iteracje tworzenia trójkąta Sierpińskiego.
333
133 233
123 213
223 323 313 113
221 112
321 121 212 312
311 131 232 322
111 211 231 331 332 132 122 222
Graf H 3 ma 3 3 = 27 węzłów.
Graf H n można definiować rekurencyjnie. Niech H m (j) (dla dowolnego m > 2) będzie grafem H m w którym każdy węzeł (i 1 , i 2 . . . i m ) zamienimy na ((i 1 , i 2 . . . i m , j). Wtedy H n można zapisac rekurencyjnie jako:
∗