여행하는 판매원 문제에 적용되는 Dijsktra의 알고리즘


13

나는 초보자 (계산 복잡성 이론의 총 초보자)이며 질문이 있습니다.

'Traveling Salesman Problem'이 있다고 가정 해 봅시다. 다음 Dijkstra 알고리즘을 적용하면 문제가 해결됩니까?

시작점에서 두 점 사이의 최단 거리를 계산합니다. 우리는 요점으로갑니다. 소스 포인트를 삭제합니다. 그런 다음 현재 점에서 다음으로 가장 짧은 거리 점을 계산합니다.

매 단계마다 그래프를 작게 만들고 다음으로 가능한 가장 짧은 거리 지점을 이동합니다. 우리가 모든 포인트를 방문 할 때까지.

이것은 여행하는 판매원 문제를 해결할 것입니까?


3
TSP는 NP-complete이고 Dijkstra의 알고리즘에는 다항식 런타임이 있습니다. P = NP의 차세대 솔루션이 될 것이라고 제안하는 것은 무엇입니까? 질문, 따라서 귀하의 접근 방식이 효과가 없을 것입니다. 이런 종류의 추론은 단지 추론적이고 마음입니다!
Raphael

답변:


24

Dijkstra의 알고리즘은 시작 정점에서 다른 정점까지의 최단 경로를 포함하는 최단 경로 트리를 반환하지만 반드시 다른 정점 사이의 최단 경로 또는 모든 정점을 방문하는 최단 경로는 아닙니다.

설명하는 욕심 많은 알고리즘이 작동하지 않는 카운터 예는 다음과 같습니다.

반례

에서 시작 하여 탐욕스러운 알고리즘은 경로 를 선택하지만 에서 시작하고 끝나는 최단 경로 는 입니다. 이후 TSP의 경로가 반복 정점에 허용되지 않는 욕심 알고리즘을 선택하면, , 가장 긴 가장자리 걸릴 강제로 시작 도시로 돌아갑니다.[ a , b , c , d , a ] a [ a , b , d , c , a ] a , b , c , d d , aa[a,b,c,d,a]a[a,b,d,c,a]a,b,c,dd,a


8

다른 답변에서 이미 밝혀 졌으므로 귀하의 제안은 여행 세일즈맨 문제를 효과적으로 해결하지 못합니다. 휴리스틱 검색 분야에서 알려진 가장 좋은 방법을 알려 드리겠습니다 (Dijkstra의 알고리즘이 인공 지능 분야와 다소 관련되어 있기 때문에) .

휴리스틱 알고리즘은 최적의 솔루션을 반환 할 수 있으며 (실제로 관리 할 수있는 크기는 비교적 작지만) 다음 방법은 Richard Korf가 90 년대에 제안했습니다. 대칭 이동 세일즈맨 문제 (가장자리 비용 가 반대 방향 횡단 할 때 동일한 가장자리의 비용과 동일 완벽하게 작동하지만 대안에 쉽게 적용 할 수 있습니다. 비대칭 버전의 경우.( v , u )(u,v)(v,u)

내가 아는 한 가장 좋은 방법은 깊이 우선 지점 및 경계 휴리스틱 검색 알고리즘 을 실행하는 것으로 구성됩니다. 여기서 휴리스틱은 최소 스패닝 트리 (MST) 의 비용입니다 . MST는 Prim의 알고리즘 또는 Kruskal의 알고리즘 을 사용하여 다항식 시간으로 계산할 수 있으므로 합리적인 시간 내에 솔루션을 반환 할 것으로 예상 할 수 있습니다. 이 두 알고리즘에 대한 훌륭한 토론을 위해서는 알고리즘 디자인 매뉴얼을 살펴 보는 것이 좋습니다.

사실,이 접근법이 제안 되었기 때문에이 문제의 최적 범위를 도출하기위한 분야에서 많은 진전이 보이지 않았으므로 조합 검색 분야에서 뜨거운 질문으로 간주합니다.

도움이 되었기를 바랍니다,


2

이 경우 Dijkstra 알고리즘의 적용이 전적으로 불필요하다는 것을 아무도 여기에서 알지 못했습니다. 가장 가까운 노드를 선택하기 만하면이 욕심 많은 알고리즘을 구현할 수 있습니다. Dijkstra의 알고리즘은 경로를 발견하는 데 사용되지만 매번 한 단계 만 수행합니다. 이것은 분명히 TSP에 대한 최적의 솔루션을 찾지 못하지만 많은 훌륭한 접근 방식도 찾지 못합니다. TSP를위한 모든 최적의 솔루션 파인더는 계산이 매우 까다 롭습니다.


1

대답은 아니오입니다. TSP 문제를 해결하는 좋은 방법은 아닙니다. 좋은 카운터 예는 다음과 같이 모든 점이 한 줄에있는 것입니다.

--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4

Dijsktra의 알고리즘을 사용하면 가난한 영업 사원이 지점 0에서 시작하여 먼저 1로 이동 한 다음 2로 이동하여 3으로 이동합니다. 이것은 최적이 아닙니다.

희망이 도움이됩니다. Steven S. Skiena의 "Algorithm Design"이라는 훌륭한 책의 첫 장을 살펴보면이 예제에 대해 자세히 설명합니다.

TSP 문제는 두 지점 사이에서 가장 짧은 방법을 찾는 것이 아니라 최적의 모든 지점 사이에 경로를 만드는 것입니다. 최적의 경로가 있으면 Dijsktra를 사용하여 경로의 각 지점 사이에서 가장 짧은 경로를 찾을 수 있습니다.


2
Dijkstra는 단일 소스 최단 경로 알고리즘이지만 영업 사원이 0에서 시작하거나 경로를 반환하지는 않습니다. 주어진 소스 정점에서 각 정점까지의 최단 경로를 포함하는 최단 경로 트리 만 반환합니다.
Joe

전통적으로, TSP 문제 [ en.wikipedia.org/wiki/… ]는 "도시와 그 쌍으로 떨어진 거리의 목록이 주어지면, 각 도시를 정확히 한 번 방문하여 출발 도시로 돌아가는 가장 짧은 경로를 찾는 것이 목표입니다. " 기술적으로는 이러한 요구 사항을 충족시킬 수 없습니다. 시작 도시로 돌아가거나 도시를 반복해서는 안됩니다.
Joe

그러나 길에서, 우리가 이러한 제약 중 하나를 완화하면 문제는 사소한 것입니다.
Joe

물론 Dijkstra는 영업 사원을 0에서 시작하지 않습니다. 그러나 원래 질문에서 제안 된 알고리즘은 시작 정점을 지정하지 않았습니다. 따라서 제안 된 알고리즘 가난한 영업 사원이 0에서 시작하도록 할 수 있습니다. 따라서이 답변은 맞습니다.
JeffE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.