하나의 정점에서 출발했을 때, 다른 모든 정점으로의 최단 경로를 구하는 Algorithm이다.
벨만 포드 방식과 차이점을 반드시 이해해야 한다.
- Greedy algorithm을 활용한 대표적인 최단경로 탐색 Algorithm이다.
- 흔히 인공위성, GPS 등에 가장 많이 사용된다.
- 간선의 가중치는 음수가 될 수 없다.
- 따라서 현실세계에 가장 적합한 Shortest Path Algorithm이다.
- 벨만 포드 알고리즘과의 가장 큰 차이이다.
기본 원리
벨만 포드 알고리즘은 “한 번이라도 방문한 모든 정점” 을 탐색하며 최단 경로를 찾는다.
하지만 다익스트라 알고리즘은 “방문하지 않은 정점 중 가중치가 최소인 정점” 을 탐색한다.
따라서, 기본적으로 시간 복잡도가 벨만 포드 알고리즘보다 낮다.
아래의 예시들을 보며 기본 원리를 이해해보자.
Example : Basic Dijkstra, O(N^2)
Example : Dijkstra with Min Heap, O(Edge * log(Vertex))
위의 예제는 O(N^2)으로 풀어내는 다익스트라였다.
이번엔 좀 더 효율적인 알고리즘을 위해 STL을 사용해 보자.
다음과 같은 점을 이용한다.
- 어차피 우리는 가중치가 가장 작은 node를 선택해 나갈 것이다.
- 이는 Priority Queue에 넣었다 빼면, 자동으로 뽑혀 나올 것!