항을 명확히하는 아래 부록 :k(k−1)
따라서 식의 항을 살펴보면 항은 첫 번째 위치에 1이있는 1을 포함하는 모든 이진 문자열의 열거입니다 . 다시 말해, 이진 문자열의 각 위치가 문제 의 개 도시 중 하나가 당시 고려하고있는 정확한 부분 집합에 속 하는지 여부를 선택하게합니다 . 따라서 5 개 도시의 경우 10101은 {1,3,5} 서브 세트에 해당합니다.(n−1k)kn
따라서 {1, ..., } 의 모든 부분 집합을 계산하려면 size = 2의 각 이진 부분 집합 (즉, 이진 문자열을 통해 계산)을 계산합니다 (즉 , 2 개의 1을 포함 하는 크기 의 이진 문자열 ). size = 3, size = 4, ... 그런 다음 size = n입니다. (size = 1 부분 집합에는 첫 번째 도시 만 포함되어야하므로 부분 집합의 1-> 다른 모든 도시-> 1과의 거리가 정확히 0이므로 부분 거리를 계산하는 것은 무의미합니다.)nn
도시가있는 각 부분 집합에서 최대 후보 최적의 부분 경로 를 고려해야합니다 . 구체적으로, 최적의 총 경로는 주어진 부분 집합을 가로 지르는 것으로 생각할 수 있으며 첫 번째 도시를 제외한 모든 도시에서 끝날 수 있습니다. 그런 다음 각 후보 하위 경로에 대해 이전의 size = 하위 경로 중 최소값과 해당 하위 경로의 터미널 도시에서 거리까지의 거리 로 해당 지점까지 최적의 투어를 계산합니다 . 현재 후보 서브 패스의 터미널 도시. 이것은 와 같은 비교를해야합니다. 내 항과 사이의 불일치kk−1k−1k−1(k−1)(k−2)(k−1)(k−2)k(k−1)링크 된 분석의 용어는 표기법의 차이입니다 ( 대한 나의 정의를 감안할 때 다른 범위에 걸쳐 요약합니다 ). 그러나 최소한이 항의 2 차 복잡성을 설명해야합니다.k
흥미 롭습니다. 몇 분 전에 C ++로이 정확한 알고리즘을 코딩했습니다. (따라서 순수한 이론의 탄젠트를 약간 실용적인 토론으로 용서하십시오. :))
그것은 비용 시간 및 내 구현에서 적어도 - 공간. 그러나 실제로 공간 요구 사항이 빠르게 커지면 시간 요구 사항보다 훨씬 고통 스럽습니다. 예를 들어, 내 PC (4GB RAM)에서 최대 24 개 도시의 인스턴스를 그 이상으로 해결할 수 있으며 메모리가 부족합니다.O(2nn2)O(2nn)
물론, 나는 단지 나쁜 프로그래머가 될 수 있으며, 당신은 실제로 나보다 더 잘 할 수 있습니다. :)
편집 : 질문의 한 세부 사항에 대해 좀 더 구체적으로 설명합니다 항은 최악의 경우 이전 하위 집합에서 부분적이고 최적의 거리를 계산해야한다는 사실에서 비롯됩니다 (최대가 있음) 그; 참고 합산되어 현재 하나) 분석에 당신은 연결. 최악의 경우에도, 총 대한 크기의 부분 집합과의 비교가 필요합니다 .k(k−1)nknO(k)k−1O(k2)
또한 내 설명이 충분히 명확하지 않은 경우 Vazirani ( PDF )에 대한 강의 노트가 있습니다. Held-Karp 분석을 포함하여 TSP에 대한 설명을 보려면 P. 188로 스크롤하십시오.