다익스트라 알고리즘은 최단 경로 알고리즘 중의 하나입니다.
그래프의 어느 정점 하나를 시작으로 하고,
나머지 정점들로의 최단 거리를 모두 구합니다.
다익스트라 알고리즘이 작동하는 방식은 다음과 같습니다.
1. 아직 방문하지 않은 정점들 중 거리가 가장 짧은 정점을 하나 선택해 방문한다.
2. 해당 정점에서 인접하고, 아직 방문하지 않은 정점들의 거리를 갱신한다.
거리 dist[] 배열을 하나 생성하여 초기값을 셋팅해 줄건데
1번 정점이 시작점이라고 했을때, 자기 자신까지의 거리는 0이기 때문에
시작점으로의 거리만 0으로 셋팅해주고, 나머지는 무한으로 초기값을 셋팅해줍니다.
이렇게 반복해서 동작하고, 끝나고 나면 각 dist 배열에 있는 값이,
각 정점으로까지의 실제 최단경로가 됩니다.
문제가 될 부분은 아직 방문하지 않은 정점들 중에서
dist값이 제일 작은 정점을 찾아 방문해야 하는데,
이걸 매번 찾으면서 가다가는 시간복잡도가 발생하여 메모리가 초과할 수 있습니다.
따라서, 우선순위큐를 사용하는데,
최소힙을 하나 생성하고, 정점 u를 방문해서, 인접한 정점 v의 거리를 갱신할 때마다,
최소힙에 (dist[v], v) 쌍을 넣습니다.
이렇게 하여 최소힙에서 먼저 나온 아이가 제일 작은 값이 될 거고, 이 값을 사용하면 됩니다.
그럼 다익스트라 알고리즘을 구현해볼게요.
'개발레시피 > └ Algorithm' 카테고리의 다른 글
[그래프/개념] 그래프 사이클 찾기 (방향, 무방향), DFS Cycle java (0) | 2017.11.18 |
---|---|
[그래프/개념] 최소 스패닝 트리(Minimum Spanning Tree), 크루스칼 알고리즘 (0) | 2017.11.16 |
[그래프/문제] BOJ9466, 텀프로젝트 알고리즘, DFS Cycle (0) | 2017.05.28 |
[그래프/개념] DFS(깊이우선탐색)과 BFS(너비우선탐색) (0) | 2017.05.28 |
[자료구조/문제] 구간합, BOJ 2042, Binary Indexed Tree (0) | 2017.05.28 |
Comments