👷🏻♂️수정 중...
Single Source Shortest Paths
그래프 G=(V,E) 의 출발 정점 s∈V 에서
각 정점 v∈V 로의 최단 경로
최단 경로와 최단 경로 가중치의 정의
📍 가중치 함수 ω:E→R
간선
으로 실수값의 가중치
를 구할 수 있는 함수
📍 경로 p=<v0,v1,v2,...,vk> 의 가중치는 그 경로를 이루는 간선들의 가중치 합
ω(p)=∑i=1kω(vi−1,vi)
📍 u∈V, v∈V일 때, u에서 v까지 최단 경로 가중치 δ(u,v) 는 다음과 같다.
δ(u,v) = ⎩⎪⎨⎪⎧min{ω(p):u→pv}∞:u에서v까지의 경로가 존재할 경우:이외의 경우
📍 정점 u에서 v까지의 최단 경로(shortest path) 는
ω(p)=δ(u,v)를 갖는 경로 p 로 정의된다.
최단 경로의 모든 부분 경로는 최단 경로이다.
그래프 G=(V,E) 와 가중 함수 ω:E→R 이 주어졌을 때
p=<v0,v1,v2,...,vk> 를 정정 v0에서 vk 까지의 최단 경로라고 하자,
0≤i≤j≤k 인 i, j 에 대해
pij=<vi,vi+1,vi+2,...,vj> 를 정점 vi에서 vj까지의 부분 경로라고 할 때,
pij는 vi에서 vj까지의 최단 경로이다.
유형
G=(V,E) 에서
단일 출발지 최단 경로 문제 (Single-source)
출발 정점 s∈V에서 각 정점 v∈V로의 최단 경로를 찾는 문제
단일 도착지 최단 경로 문제 (Single-destination)
각 정점 v∈V에서 도착 정점 t∈V으로의 최단 경로를 찾는 문제.
간선의 방향을 모두 뒤집어 Single-source
문제로 바꿀 수 있다.
단일 쌍 최단 경로 문제 (Single-pair)
주어진 정점 u, v에 대해 u에서 v까지의 최단 경로를 찾는 문제.
문제 해결을 위해 알려진 모든 방법이 Single-source
문제의 worst case와 동일한 수행시간을 갖는다.
모든 쌍 최단 경로 문제 (All-pairs)
모든 정점 쌍 u,v∈V에 대해 u에서 v까지의 최단 경로를 찾는 문제.
Single-source
문제를 푸는 알고리즘을 각 정점에 대해 수행하며 풀 수도 있으나, 더 빠른 알고리즘이 존재함
단일 출발지 최단 경로 문제(Single-source)를 해결하는 방법에 대한 설명으로 위 유형에 대한 해결 방법을 제시할 수 있다.
순환 : 최단 경로는 순환을 포함할 수 없다.
- 가중치가 음수인 순환 : 음의 가중치를 갖는 순환을 여러번 반복하면 매우 큰 음의 가중치를 갖는 경로를 찾을 수 있고, 따라서 "최단" 경로를 찾을 수 없다.
- 가중치가 양수인 순환 : 출발지와 도착지가 같아, 더 작은 가중치를 갖는 경로를 만들기 때문에 불가능 하다.
- 가중치가 0인 순환 : 해당 간선을 이용할 이유가 없다.
이 순환을 최단 경로로부터 제거하면 순환을 포함하지 않는 최단 경로를 구할 수 있다.
즉, 일반성을 잃지 않고 최단 경로를 찾는 방법에서, 가중치가 0인 순환을 사용할 이유가 없다.
완화(Relaxation)
최단 경로 추정값(Shortest-path estimate)
완화 기술을 이용하기 위해서, 최단 경로 추정값 이라는 속성의 정의가 필요하다.
각 정점 v∈V 에 대해,
- 초기값 v.d=∞
- v.d≥δ(s,v)
을 유지하는 v.d 를 최단 경로 추정값(Shortest-path estimate)이라고 한다.
즉, 정점 v로의 최단 경로를 구하는 과정에서 현재까지 구해진,
최단 경로로 '추정되는'값을 이야기 한다.
각 정점을 index로 하는 배열 또는 List로 구현 하거나
각 정점의 이름과 시작 정점으로 부터의 거리를 가진 class로 구현할 수 있다.
초기화
시작 정점으로 부터의 각 정점 v∈V에 대한 최단 경로 추정값은 모두 ∞로 초기화.
시작 정점→시작 정점 의 최단 경로 추정값은 0으로 초기화.
완화
왜 완화(relaxation) 일까?
상한을 낮추어 v.d≤u.d+ω(u,v)
간선 (u,v)를 완화하는 과정
- u에서 v까지의 최단경로 추정값 v.d의 개선 여부를 검사
- 개선 가능하다면, v.d 갱신