본문 바로가기

알고리즘/알고리즘_학교

6-5강 - Dynamic Programming 5 (The Traveling Salesperson Problem, TSP)

5. The Traveling Salesperson Problem (TSP)

0) The Traveling Salesperson Problem 

1> tour (Hamiltonian cycle)

모든 vertex를 한 번씩 지나는 cycle 구하기

2> optimal tour 

minimum length(cost)로 tour를 만들기

=> TSP : optimal tour 찾기

1) The Principle of Optimality

1> 전제 : T = [v1, vp1, vp2, ... , vpn-1, v1] = optimal tour

=> P = [vp1, vp2, ... , vpn-1, v1]라는 path가 minimum length(cost)

2> 가정 : P'라는 다른 path가 length(cost)가 더 작다.

3> 전제 부정 : P가 minimum length(cost)라는 것에 모순이 생깁니다.

4> 결론 : 그러므로 P가 minimal length(cost)를 가집니다.

 

2) Algorithm

0> recursive form을 위한 정의

W[i][j] : vi부터 vj까지의 length(cost) (edge가 없으면 ∞)

D[vi][A] : [1] vi부터 v1까지 [2] A 내부의 모든 점을 한 번씩 지나는 [3] 최소 path의 length(cost)

 

1> recursive form

[1] recursive form

(vi에서 A 내부 원소들을 중복 없이 다 거쳐서 v1까지 갈 때의 minimum length)

- <1> vj에서 'vj를 제외한 A 내부 원소들을 중복 없이 다 거쳐서 v1까지 간 것 앞에

- <2> vi에서 vj까지의 length를 붙인 것

- A 내부의 j 중에서 <1> + <2>가 최소가 되는 것을 고른다.

 

 

[2] 초항

(vi에서 v1까지 아무것도 거치지 않고 갈 때의 minimum length = W[i][1])

 

[3] 최종 optimal tour 형태

(v1에서 V-{v1} 내부 원소들을 중복 없이 다 거쳐서 v1까지 갈 때의 minimum length)

 

2> bottom-up

A가 공집합일 때부터 |A|=n-1일 때까지 bottom-up

3> top-down

[1] memo 

P[i][A] : D[i][A}에서 최소를 만드는 j를 저장합니다. (i 다음에 i를 이어주는 j를 저장합니다.)

 

[2] 구현

3) Complexity

1> Time Complexity

2> Space Complexity