Ostatnie pytanie dotyczyło teraz klasycznego algorytmu programowania dynamicznego dla TSP, niezależnie od Bellmana i Held-Karpa . Algorytm jest powszechnie zgłaszany do działania w czasie . Jednak, jak niedawno zauważył jeden z moich studentów, ten czas działania może wymagać nieracjonalnie silnego modelu obliczeń.
Oto krótki opis algorytmu. Dane wejściowe składają się z ukierunkowanego wykresu z n wierzchołkami i nieujemnej funkcji długości ℓ : E → R + . Dla dowolnych wierzchołków s i t oraz dowolnego podzbioru X wierzchołków, który wyklucza s i t , niech L ( s , X , t ) oznacza długość najkrótszej ścieżki hamiltonowskiej od s do t w indukowanym podrozdziale . Algorytm Bellmana-Helda-Karpa opiera się na następującej powtarzalności (lub, jak nazywają to ekonomiści i teoretycy kontroli, „równanie Bellmana”):
Dla każdego wierzchołka , długością optymalną trasę podróży sprzedawca jest l ( s , V ∖ { s } , s ) . Ponieważ pierwszy parametr s jest stały we wszystkich wywołaniach rekurencyjnych, istnieje Θ ( 2 n n ) różnych podproblemów, a każdy podproblem zależy od co najwyżej n innych. Zatem algorytm programowania dynamicznego działa w czasie O ( 2 n n 2 ) .
A może to ?!
Standardowy model liczb całkowitych RAM umożliwia ciągłe manipulowanie liczbami całkowitymi za pomocą bitów , ale przynajmniej w przypadku operacji arytmetycznych i logicznych większe liczby całkowite muszą być podzielone na fragmenty wielkości słowa. (W przeciwnym razie mogą się zdarzyć dziwne rzeczy .) Czy nie dotyczy to również dostępu do dłuższych adresów pamięci? Jeśli algorytm wykorzystuje przestrzeń wielobiegunową, czy uzasadnione jest założenie, że dostęp do pamięci wymaga tylko stałego czasu?
W szczególności w przypadku algorytmu Bellmana-Helda-Karpa algorytm musi przekształcić opis podzestawu w opis podzestawu X ∖ { v } , dla każdego v , aby uzyskać dostęp do tabeli zapamiętywania. Jeśli podzbiory są reprezentowane przez liczby całkowite, liczby te wymagają n bitów i dlatego nie można nimi manipulować w stałym czasie; jeśli nie są reprezentowane przez liczby całkowite, ich reprezentacja nie może być użyta bezpośrednio jako indeks w tabeli zapamiętywania.
Tak więc: jaki jest rzeczywisty asymptotyczny czas działania algorytmu Bellmana-Helda-Karpa?
Odpowiedzi:
Jest to mniej matematyczna odpowiedź niż filozoficzna, ale wolę myśleć o modelu pamięci RAM, który pozwala na ciągłe manipulowanie liczbami całkowitymi za pomocą pewnej liczby B bitów, która jest nieznana, ale co najmniej tak duża jak , gdzie S jest ilością miejsca wymaganą przez algorytm. Ponieważ jeśli liczby całkowite nie były tak duże, jak mógłbyś w ogóle zająć się pamięcią? W przypadku wielomianowych algorytmów czasu i przestrzeni jest on taki sam, jak w bitach O (log n), ale w przypadku algorytmów przestrzeni wykładniczej pozwala to uniknąć problemu.log2S
Oczywiście, jeśli S przekroczy ilość pamięci, którą faktycznie masz, algorytm w ogóle się nie uruchomi. Lub będzie działał przez stronicowanie informacji do iz pamięci i powinieneś używać modelu hierarchii pamięci zamiast modelu RAM.
źródło
Dyskusja na ten temat znajduje się w najnowszej książce Fedora V. Fomina i Dietera Kratscha „ Dokładne algorytmy wykładnicze ”, w których określają czas działania w modelu pamięci RAM o koszcie jednostkowym i modelu pamięci RAM o koszcie logarytmicznym ( - maksymalna odległość między miastami i f ( n ) = O ∗ ( g ( n ) ), jeśli f ( n ) = O ( g ( n ) p o l y ( n ) ) ):W f(n)=O∗(g(n)) f(n)=O(g(n)poly(n))
źródło