정리와기록 블로그

다익스트라 알고리즘 본문

이론/Algorithm

다익스트라 알고리즘

뫂림 2020. 3. 2. 22:58

다익스트라 알고리즘은 다음과 같이 흘러간다.

 

사전 조건:

1부터 N까지의 노드, 시작 노드는 1로 한다.

간선 정보는 w[i][j] (i에서 j로 가는 간선의 가중치, 비용).

dist[i]는 시작 노드에서 i까지의 거리 (dist[1] = 0)

 

1) dist[]를 초기화한다. dist[1] = 0, 나머지 dist[i] =  INF, (INF는 매우 큰 수, i != 0)

 

2) 1부터 N까지 노드 중 dist[i]가 최소인 노드를 선택한다. 처음에는 당연히 시작 노드인 1번 노드가 선택된다. (한 번 선택한 후에 다시 보지는 않는다. (= 방문과 같다))

 

3) 인접 노드(j)를 방문하는데, 다음 조건을 만족하는 경우 dist[j]를 갱신해준다.

조건 : if (dist[j] > dist[i] + w[i][j]) dist[j] = dist[i] + w[i][j]   

 

4) 이런 식으로 모든 노드가 갱신될 때 끝난다.

 

주의 사항:

  • 다익스트라 알고리즘은 간선의 가중치가 0이거나 양수일 경우에만 사용할 수 있다. 

 

Tip:

  • C++에서 priority_queue를 이용하면 2)의 최소 노드 선택을 nlog(n)으로 시간복잡도를 줄일 수 있다.

 

참고:

https://wondy1128.tistory.com/95

 

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

다익스트라 알고리즘이란? 그래프 상에 음의 가중치가 없을 때! 최단경로를 찾기위한 알고리즘이다. 시작정점부터 다른 정점까지의 최단경로를 알 수 있음. 아 그리고 간선이 유향/무향 상관이 없다. 그래프 그림..

wondy1128.tistory.com

https://hsp1116.tistory.com/42

 

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

그래프에서 정점끼리의 최단 경로를 구하는 문제는 여러가지 방법이 있다. 하나의 정점에서 다른 하나의 정점까지의 최단 경로를 구하는 문제(single source and single destination shortest path problem) 하나..

hsp1116.tistory.com

 

'이론 > Algorithm' 카테고리의 다른 글

이분 그래프 탐색 ([1707] 이분 그래프)  (0) 2020.03.02
유클리드 호제법  (0) 2020.02.27
문제 해결 방법론 (1)  (0) 2020.01.16
시간복잡도 정리  (0) 2019.12.18
Comments