TSP를위한 Held-Karp 알고리즘의 시간 복잡성


9

Michael Held와 Richard M. Karp의 " 시퀀싱 문제에 대한 동적 프로그래밍 접근 방법 "을 살펴보면 다음 질문을하게되었습니다. 왜 TSP에 대한 알고리즘의 복잡성이 (p. 199), 요인 어디에서 가져 ? 내가 올바르게 이해한다면 은 도시의 각 하위 집합에 대한 추가 수를 의미합니다. 그럼 왜 각 추가 작업은 나에게 알 수없는와 결합 작업? 나는 그것이 어떻게 든 최소한으로 연결되어 있다고 가정하지만 최소한의 컴퓨팅에는 많은 연산이 필요하지 않은 것 같습니다.(k=2n1k(k1)(n1k))+(n1)kk1k

Held 및 Karp 및 독립적으로 Bellman의 동적 프로그래밍 알고리즘은 다음과 같이 실행됩니다. 각 쌍 , 통과하는 경로, 즉 모든 요소 및 계산 에서 종료 되는 경로를 의미 함(S,ci)c1Sci

OPT[S,ci]=min{OPT[S{ci},cj]+d(cj,ci):cjS{ci}},

여기서 는 도시 와 사이의 거리를 의미합니다 . 그런 다음 종이의 공식에서 는 의 크기를 의미합니다 .d(cj,ci)cjcikS

답변:


5

항을 명확히하는 아래 부록 :k(k1)

따라서 식의 항을 살펴보면 항은 첫 번째 위치에 1이있는 1을 포함하는 모든 이진 문자열의 열거입니다 . 다시 말해, 이진 문자열의 각 위치가 문제 의 개 도시 중 하나가 당시 고려하고있는 정확한 부분 집합에 속 하는지 여부를 선택하게합니다 . 따라서 5 개 도시의 경우 10101은 {1,3,5} 서브 세트에 해당합니다.(n1k)kn

따라서 {1, ..., } 의 모든 부분 집합을 계산하려면 size = 2의 각 이진 부분 집합 (즉, 이진 문자열을 통해 계산)을 계산합니다 (즉 , 2 개의 1을 포함 하는 크기 의 이진 문자열 ). size = 3, size = 4, ... 그런 다음 size = n입니다. (size = 1 부분 집합에는 첫 번째 도시 만 포함되어야하므로 부분 집합의 1-> 다른 모든 도시-> 1과의 거리가 정확히 0이므로 부분 거리를 계산하는 것은 무의미합니다.)nn

도시가있는 각 부분 집합에서 최대 후보 최적의 부분 경로 를 고려해야합니다 . 구체적으로, 최적의 총 경로는 주어진 부분 집합을 가로 지르는 것으로 생각할 수 있으며 첫 번째 도시를 제외한 모든 도시에서 끝날 수 있습니다. 그런 다음 각 후보 하위 경로에 대해 이전의 size = 하위 경로 중 최소값과 해당 하위 경로의 터미널 도시에서 거리까지의 거리 로 해당 지점까지 최적의 투어를 ​​계산합니다 . 현재 후보 서브 패스의 터미널 도시. 이것은 와 같은 비교를해야합니다. 내 항과 사이의 불일치kk1k1k1(k1)(k2)(k1)(k2)k(k1)링크 된 분석의 용어는 표기법의 차이입니다 ( 대한 나의 정의를 감안할 때 다른 범위에 걸쳐 요약합니다 ). 그러나 최소한이 항의 2 차 복잡성을 설명해야합니다.k


흥미 롭습니다. 몇 분 전에 C ++로이 정확한 알고리즘을 코딩했습니다. (따라서 순수한 이론의 탄젠트를 약간 실용적인 토론으로 용서하십시오. :))

그것은 비용 시간 및 내 구현에서 적어도 - 공간. 그러나 실제로 공간 요구 사항이 빠르게 커지면 시간 요구 사항보다 훨씬 고통 스럽습니다. 예를 들어, 내 PC (4GB RAM)에서 최대 24 개 도시의 인스턴스를 그 이상으로 해결할 수 있으며 메모리가 부족합니다.O(2nn2)O(2nn)

물론, 나는 단지 나쁜 프로그래머가 될 수 있으며, 당신은 실제로 나보다 더 잘 할 수 있습니다. :)

편집 : 질문의 한 세부 사항에 대해 좀 더 구체적으로 설명합니다 항은 최악의 경우 이전 하위 집합에서 부분적이고 최적의 거리를 계산해야한다는 사실에서 비롯됩니다 (최대가 있음) 그; 참고 합산되어 현재 하나) 분석에 당신은 연결. 최악의 경우에도, 총 대한 크기의 부분 집합과의 비교가 필요합니다 .k(k1)nknO(k)k1O(k2)

또한 내 설명이 충분히 명확하지 않은 경우 Vazirani ( PDF )에 대한 강의 노트가 있습니다. Held-Karp 분석을 포함하여 TSP에 대한 설명을 보려면 P. 188로 스크롤하십시오.


오 당연하지! 나는 지금 그것에 대해 바보 같은 생각을 느낀다. 답변을 업데이트하겠습니다. 나는 실제로 그 정확한 의견을 전에 들었고, 그것에 대해 생각하지 않고 그대로 전달했습니다. 그리고 그렇습니다. 파일에 쓰거나 파일에서 읽으면 여러 도시를 효과적으로 고를 수 있습니다. ... 실제 목적으로 TSP 인스턴스를 해결하지 않으면 걱정할 가치가 없습니다. 광산은 실제로 실용적인 목적이 아니 었습니다. ;)
Daniel Apon

2
Bjorklund 알고리즘을 구현할 시간 :)
Suresh Venkat

@Suresh : 좋은 생각입니다!
Daniel Apon

@Daniel Apon“부분적인 최적 거리”를 계산할 때 왜 우리가 비교를해야하는지 정확하게 설명해 주시겠습니까?
Oleksandr Bondarenko

@ Oleksandr : 물론, 나는 그것을 내 대답의 맨 위에 추가 할 것입니다.
Daniel Apon

0

주요 참고 사항

우리가 계산하고 있음에 유의해야 저장하지
"에 대한 최적의 경로의 거리 combination of k cities"
하지만
"에 대한 최적의 경로의 거리 combination of k cities 대한 end-point city from this combination".
그것을 이해하면 다음 공식에서 처음 두 승수의 의미에 도움이됩니다.

첫 단계

첫 번째 단계의 작업 수는 다음과 같습니다.

k>=2(n1k1)choose city combinationof size = k1(k1)choose city to be the lastfrom k1 citiesin chosen combination((n1)(k1))choose citythat is not in chosen combinationto add to path

합계에 누락 된 위첨자 의미 for all k>=2 that is valid for binomial coefficient. 합계의 마지막 유효하지 널 용어위한 것일 정도로 은 수단 우리 합 어쩌려 구`t 캡처 마지막 선택 해당 도시의 첫 번째 도시에 연결합니다. 첫 번째 도시와 연결 되는 도시가 있습니다. 마지막으로이 용어를 합계에 추가합니다.k=n1

(n1n2)(n2)1
n1

Held-Karp Wikipedia 페이지 에서도 제공하는 수식을 변환 하십시오 .

k>=2(n1k1)(k1)((n1)(k1))=k>=2(n1)!(k1)!(nk)!(k1)(nk)=k>=2(n1)!k!(n1k)!k(k1)=k>=2(n1k)k(k1)
이항 계수를 조작하면 첫 번째 연산의 수 위상은
k>=2(n1k)k(k1)=k>=2(n1)!k!(n1k)!k(k1)=k>=2(n3)!(k2)!(n3(k2))!(n1)(n2)=(n1)(n2)k>=2(n3k2)=(n1)(n2)2n3
(n1)(n2)2n3+(n1)

두 번째 단계

두 번째 단계는 계산 거리와 동시에 첫 번째 단계에서 작성한 표시로 최적의 경로를 복원하는 것입니다.

"에 대한 각각의 최적의 경로 combination of k cities end-point city from this combination"우리는 마지막에서 두 번째 도시를 저장했습니다.

최적의 경로를 역 추적하려면 두 번째에서 마지막 도시인 "for combination of k cities AND for end-point city from this combination" 를 반환하도록 일부 데이터 구조를 요청해야합니다 . 따라서이 데이터 구조는 다음과 같아야
Map<combination of k cities, Map<last city, second-to-last city>>합니다. combination of k cities우리의 색인으로 예를 들어 사용할 수 있습니다 binary_string[city id]=1 if city id is in combination. 따라서 combination of k cities조합을 식별하고 데이터 구조를 색인화하려면의 모든 요소를 ​​살펴 봐야 합니다. 이는 두 번째 단계에 대한 작업 수를 제공합니다.

k>=2n1k=(n)(n1)21

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.