공식화: 가중 그래프 G(V,E) W : E -> R의 문제

두 알고리즘 : 다익스라 O(VlogV+E)는 음이 아닌 가중치를 가정, 벨만-포드 O(V E)는 일반적인 알고리즘


가중 그래프 G(V,E), W : E -> R의 모델

  • V = 정점(도로의 교차점)
  • E = 간선(거리, 도로); 방향 간선 (일반통행 도로)
  • W(U,V) = 간선 (u,v)의 가중치 (거리, 통행료)

shrt_path


p는 V0에서 Vk까지의 경로 p를 의미한다. (V0)는 V0에서 V0까지의 가중치 0인 경로를 의미한다.


u에서 v까지 최단 경로의 가중치를 다음과 같이 정의한다.

shrt_path2


단일 출발 최단 경로 :

G(V,E), w와 시작 정점 S가 주어져 있을 때, S부터 각각의 v ∈ V 까지의 δ(S, V )[와 최단 경로]를 찾아라.

자료구조

shrt_path3

d[v]는 v로 가는 더 좋은 경로를 찾을 때 마다 줄어든다.


음의 가중치 간선

  • 몇몇 적용에는 자연스럽다.(예, 가중치로 로그가 쓰이는 경우)
  • 몇몇 알고리즘은 음의 가중치를 갖는 간선을 허용하지 않는다. (예, 다익스트라)
  • 음의 가중치를 갖는 간선이 있으면, 음의 사이클이 있을 수 도 있다. -> 최단 경로가 없을 수 도 있다.

음의 간선이 있는 경우, 최단 경로 알고리즘은 음의 사이클을 찾을 수 있어야 한다.(예, 벨만-포드)


최단 경로 알고리즘의 일반적인 구조 (음의 사이클이 없는 경우)

shrt_path4


n개의 간선이 있고 첫 세 개의 간선이 2^n/2의 가중치를 갖고, 두 번째 간선들은 2^(n/2)-1의 가중치를 갖는 식으로 된다. 경로적으로 간선을 선택하면 d(vn-1)의 첫 값이 (2^n/2+2^(n/2)-1+…+4+2+1)이 될 것이다. 이 순서로, Vn-3과 Vn-1을 연결하는 가중치가 1인 간선을 완화할 수 있을 것이다. 그러면, d(Vn-1)는 1이 줄어들 것이다. 그리고 Vn-5와 Vn-3을 연결하는 가중치 2인 간선에 대해 완화하면, d(Vn-2)가 2만큼 줄어들 것이다. 그 후로, d(Vn-1)을 1만큼 줄이기 위해 간선 (d(Vn-3),d(Vn-2))와 (Vn-2, Vn-1)에 대해 완화할 수 있다. 그리고 또, 간선 (Vn-3,Vn-1)에 대해 완화한다. 이런 식으로 d(Vn-1)를 한 번 완화할 때마다 1씩 줄이면서 (2^n/2+2^(n/2)-1+…+4+2+1)까지 줄일 수 있을 것이다. 이는 O(2^n/2) 시간이 걸린다.


최적 부분 구조

정리 : 최단 경로의 부분 경로는 최단 경로이다.

p =< v0 , v1 , …, vk > 를 최단 경로라고 하고

pij =< v0 , vi+1 , …, vj > 0 ≤ i ≤ j ≤ k 라고 하면

pij는 최단 경로이다.

shrt_path5


만약 pij’가 pij보다 작다고 하면, pij대신 pij’를 사용하게 되면 p보다 작아진다.

삼각부등식

정리 : 모든 u,v,x ∈ X 에 대해

shrt_path6


출처

MIT 파이썬을 이용한 알고리즘