본문 바로가기

Algorithm/Etc

다익스트라(Dijkstra) 알고리즘

 

 

23. 다익스트라(Dijkstra) 알고리즘

다익스트라(Dijkstra) 알고리즘은 다이나믹 프로그래밍을 활용한 대표적인 최단 경로(Shortest Path) 탐...

blog.naver.com

 

 

1. 출발 노드를 설정합니다.
  2. 출발 노드를 기준으로 각 노드의 최소 비용을 저장합니다.
  3. 방문하지 않은 노드 중에서 가장 비용이 적은 노드를 선택합니다.
  4. 해당 노드를 거쳐서 특정한 노드로 가는 경우를 고려하여 최소 비용을 갱신합니다.
  5. 위 과정에서 3번 ~ 4번을 반복합니다.

 

 

 

최소 비용을 단순히 선형 탐색으로 찾도록 만들었습니다. 이렇게 작성하는 경우 다익스트라의 시간 복잡도가 O(N^2)으로 형성됩니다. 따라서 최대한 빠르게 작동시켜야 하는 경우 힙 구조를 활용하여 시간 복잡도 O(N * log N)을 만들 수 있습니다. 특히 위와 같은 소스코드는 정점의 갯수가 많은데 간선은 적을 때 치명적일 정도로 비효율적으로 작동할 수 있습니다.

인접 리스트 방식을 활용하여 시간 복잡도 O(N * log N)으로 구현한 것입니다. 이 경우 정점에 비해 간선의 갯수가 비정상적으로 적어도 안정적으로 처리할 수 있습니다.

'Algorithm > Etc' 카테고리의 다른 글

순열 알고리즘 (Permutation Algorithm)  (0) 2021.07.01
endl과 \n, flsuh  (0) 2021.06.25
지도에서 DFS, BFS  (0) 2021.06.09
Deque  (0) 2021.05.21
DP 하면서 틀리는 것 / DFS하면서 틀리는 것  (0) 2021.05.11