Dodatek do poniżej wyjaśniający warunki :k(k−1)
Tak więc, jeśli przeanalizujesz terminy w wyrażeniu, możesz wyobrazić sobie (analogicznie), że termin jest wyliczeniem wszystkich ciągów binarnych zawierających 1, które mają 1 w pierwszej pozycji. Innymi słowy, pozwalamy każdej pozycji w łańcuchu binarnym reprezentować wybór, czy dane z jednego z miast w problemie znajduje się w dokładnie podzbiorze, który rozważamy w tym czasie. Zatem dla 5 miast 10101 odpowiada podzestawowi {1,3,5}.(n−1k)kn
Zatem, aby obliczyć wszystkie podzbiory {1, ..., }, po prostu zliczamy każdy podzbiór binarny (tj. Liczymy przez ciągi binarne) o rozmiarze = 2 (tj. Ciągi binarne o rozmiarze które zawierają dwa 1), rozmiar = 3, następnie rozmiar = 4, ... następnie rozmiar = n. (Zauważ, że podzbiór size = 1 musi zawierać tylko pierwsze miasto, a zatem obliczenie jego częściowej odległości nie ma znaczenia, ponieważ odległość od 1 -> wszystkich innych miast w podzbiorze -> 1 wynosi dokładnie 0).nn
W każdym podzbiorze miastami musimy rozważyć do kandydatów optymalnych, częściowych ścieżek. W szczególności optymalna, całkowita ścieżka mogłaby przejść przez dany podzbiór i skończyć w jednym z miast , z wyłączeniem pierwszego miasta. Następnie dla każdej takiej kandydującej podścieżki obliczamy optymalną trasę do tego punktu jako minimum dowolnej z poprzednich podścieżek size = plus odległość od miasta końcowego dla tej podścieżki do miasto końcowe dla bieżącej ścieżki podrzędnej kandydata. To daje takie porównania, które musimy wykonać. Rozbieżność między moim terminem akk−1k−1k−1(k−1)(k−2)(k−1)(k−2)k(k−1)termin w powiązanej analizie jest różnicą notacyjną (sumowałbym w innym zakresie, biorąc pod uwagę moją definicję niż oni). Przynajmniej powinien on jednak ilustrować złożoność kwadratową tego terminu.k
Co ciekawe - właśnie skończyłem kodowanie tego dokładnego algorytmu w C ++ kilka minut temu. (Więc wybacz styczną od czystej teorii do małej praktycznej dyskusji. :))
Kosztuje czas i przestrzeń - przynajmniej pod moją implementacją. Praktycznie rzecz biorąc, gdy Twoje wymagania przestrzenne rosną tak szybko, stają się o wiele bardziej bolesne niż wymagania czasowe. Na przykład na moim komputerze (z 4 GB pamięci RAM) mogę rozwiązywać instancje z maksymalnie 24 miastami - nawet więcej, i brakuje mi pamięci.O(2nn2)O(2nn)
Oczywiście, mógłbym być po prostu złym programistą, a może będziesz w stanie radzić sobie lepiej ode mnie w praktyce. :)
Edycja: Trochę więcej szczegółów na temat jednego szczegółu pytania: Pojęcie wynika z faktu, że w najgorszym przypadku musisz obliczyć częściową, optymalną odległość od poprzednich podzbiorów (najwyżej z nich; zwróć uwagę, że jest sumowane przez w analizie, którą połączyłeś) z bieżącą. Wymaga to, ponownie w najgorszym przypadku, porównań z podzbiorami wielkości dla sumy .k(k−1)nknO(k)k−1O(k2)
Ponadto, jeśli moje wyjaśnienie nie było wystarczająco jasne, oto kilka miłych notatek z wykładów Vazirani ( PDF ). Przewiń w dół do P. 188, aby omówić TSP, w tym analizę Held-Karp.