티스토리 뷰

알고리즘/그래프

다익스트라

hellogaon 2018. 7. 22. 20:35

다익스트라(Dijkstra)는 간선에 비용이 있는 그래프에서

시작점부터 다른 정점까지의 최단거리를 구할 수 있는 단일 시작점 최단거리 알고리즘입니다.

이 때 간선의 비용이 음수아닐 경우에만 가능하며 간선의 비용이 음수일 경우 추후 배울 벨만 포드 알고리즘을 사용합니다.

다익스트라 알고리즘은 dist배열을 사용하며, dist[i]는 시작점에서 i번 정점까지의 최단거리를 뜻합니다.

시작점의 dist값은 0, 나머지 모든 정점은 무한대로 초기화한 뒤 시작점을 방문하는 것을 시작으로,

아직 방문하지 않은 정점들 중 시작점으로부터 가장 거리가 작은 정점(u)을 방문한 뒤

해당 정점(u)을 거쳐서 인접한 정점(v)으로 가는 거리(cost)가 dist에 있는 값보다 더 작을 경우(dist[v] > dist[u] + cost)

dist값을 갱신하며 모든 정점을 방문 할 때까지 반복합니다.

이 때 효율성을 위하여 dist값을 갱신할 때마다 시작점부터 그 정점까지의 거리(dist[v])와 그 정점(v)을 우선순위 큐에 넣어

시작점으로 부터 가장 거리가 작은 정점을 빠르게 찾아낼 수 있습니다.

이로인하여 그래프를 인접리스트로 표현하였을 경우 다익스트라 알고리즘의 시간복잡도는

정점 개수가 V 간선 개수가 E일 때 O(ElgV)이며

최단거리 문제에 많이 응용되므로 동작과정의 확실한 이해가 필요한 알고리즘입니다.



기본 문제


1753번: 최단경로
1261번: 알고스팟





'알고리즘 > 그래프' 카테고리의 다른 글

플로이드 와샬  (0) 2018.07.22
벨만 포드  (0) 2018.07.22
최소 스패닝 트리  (0) 2018.07.18
2-SAT  (0) 2018.07.18
SCC  (0) 2018.07.18
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday