최단 경로 문제 (Shortest Path Problem)
가중치 그래프는 간선에 값을 부여한 그래프이다. 이때 경로의 길이는 경로 안의 간선의 가중치 합으로 정의하고, 간선 $ (i, j) $ 의 가중치를 $ w (i, j) $ 라 표기한다.
가중치 그래프가 있을 때 2개의 정점 간 가장 길이가 짧은 경로를 찾는 최단 경로 문제는 내비게이션, 통신망 등 여러 분야에서 활용된다.
다익스트라 알고리즘
다익스트라 알고리즘은 에츠허르 다익스트라가 고안한 최단 경로를 구하는 알고리즘이다. $ n $ 개의 정점으로 구성되고, 단순하며, 연결된 가중치 그래프에 대하여 최악의 경우 $ \mathcal{\Theta} (n^2) $ 의 시간복잡도를 가진다.
이 알고리즘은 가중치 그래프의 어느 한 정점에서 다른 정점으로의 최단 경로의 길이를 찾는 것이다.
입력: $ G $ (단순하며 연결된 가중치 그래프), $ w $ (가중치), $ a $ (시작 정점), $ z $ (도착 정점)
출력: $ L(z) $ ($ a $ 에서 $ z $ 까지의 최단 경로의 길이)
Dijkstra(G, w, a, z) {
L[a] = 0
T = [] // T는 a로부터 최단거리 계산이 안된 정점의 집합
for each vertex v in G {
if (v != a) {
L[v] = INFINITY
T = T + v
}
}
while (T is not empty) {
v = vertex in T with min L[v]
T = T - v
for each x in T adjacent to v {
L[x] = min(L[x], L[v] + w(v, x))
}
}
return L[z]
}
말로 풀어 설명하자면 먼저 출발점부터의 거리를 저장한 리스트를 초기화하고, 출발점으로부터 최단거리 계산이 안된 정점의 집합을 추가한다. 그 후 현재 최단 거리가 가장 짧은 정점을 선택한다. 선택된 정점은 최단거리 계산 안된 집합에서 제거한다. 그 후 선택된 정점과 선택한 정점에 인접한 정점들에 대해 인접한 정점을 거쳐가는 것이 빠른지 느린지를 계산하여 출발점으로부터 최단거리를 계산한다. 이를 반복하면 최종적으로 도착점에 대한 최단거리가 계산된다.
'Mathematics > Discrete Mathematics' 카테고리의 다른 글
[Discrete Mathematics] 트리(tree)와 허프만 코드(Huffman codes) (0) | 2024.11.27 |
---|---|
[Discrete Mathematics] 그래프 동형사상(isomorphism of graph) 및 위상동형(homeomorphic) (0) | 2024.11.21 |
[Discrete Mathematics] 오일러 사이클(Euler cycle) 및 해밀턴 사이클(Hamiltonian cycle) (0) | 2024.11.19 |
[Discrete Mathematics] 그래프(graph)의 기본 개념과 그래프 구분 (0) | 2024.11.19 |
[Discrete Mathematics] 점화 관계(recurrence relation)와 알고리즘 분석에 대한 응용 (0) | 2024.11.15 |