이 게시글은 강원대학교 컴퓨터정보통신공학전공에서 2010년 봄학기 알고리즘 강의시간에 참고한 서적의 정보를 기반으로 작성되었습니다.
이 알고리즘은 1959년 다익스트라(Dijkstra)가 고안하였다.
이것은 어떠한 간선도 음수 값을 가지지 않는 방향그래프에서
주어진 출발점과 도착점 사이의 최단 경로 문제를 푸는 알고리즘!!
예를 들어, 그래프의 점들이 각각 지하철 역을 나타내고 연결선들이 지하철 노선을 의미한다면 이 알고리즘은 지하철 역간의 최단 경로를 구하게 된다.
아래 알고리즘에서 u := Extract_Min(Q)는 점의 집합 Q에서 가장 작은 d[u]값을 찾은 다음 그 점 u를 Q에서 제거한 후 반환하는 함수를 가리킨다.
function Dijkstra(G, w, s)for each vertex v in V[G] // 초기화 d[v] := infinity previous[v] := undefined d[s] := 0 S := empty set Q := set of all vertices while Q is not an empty set // 알고리즘의 실행 u := Extract_Min(Q) S := S union {u} for each edge (u,v) outgoing from u if d[v] > d[u] + w(u,v) // (u,v)의 경감 d[v] := d[u] + w(u,v) previous[v] := u //경로 추적할 때 쓰임
만약 모든 v에 대해서가 아니라 특정한 s에서 v까지의 최단 거리만을 알고 싶다면 9번째 행에서 u = t일 때 종료하면 된다.
s에서 t까지의 최단 경로는 다음과 같이 얻을 수 있다.
S := empty sequence
u := t
while defined u
insert u to the beginning of S
u := previous[u]