Blog Content

    티스토리 뷰

    [그래프/개념] 다익스트라 알고리즘(Dijkstra's Algorithm) , 최단경로구하기

    다익스트라 알고리즘은 최단 경로 알고리즘 중의 하나입니다.

    그래프의 어느 정점 하나를 시작으로 하고,

    나머지 정점들로의 최단 거리를 모두 구합니다.


    다익스트라 알고리즘이 작동하는 방식은 다음과 같습니다.

    1. 아직 방문하지 않은 정점들 중 거리가 가장 짧은 정점을 하나 선택해 방문한다.

    2. 해당 정점에서 인접하고, 아직 방문하지 않은 정점들의 거리를 갱신한다.


    거리 dist[] 배열을 하나 생성하여 초기값을 셋팅해 줄건데

    1번 정점이 시작점이라고 했을때, 자기 자신까지의 거리는 0이기 때문에

    시작점으로의 거리만 0으로 셋팅해주고, 나머지는 무한으로 초기값을 셋팅해줍니다.


    이렇게 반복해서 동작하고, 끝나고 나면 각 dist 배열에 있는 값이, 

    각 정점으로까지의 실제 최단경로가 됩니다.


    문제가 될 부분은 아직 방문하지 않은 정점들 중에서

    dist값이 제일 작은 정점을 찾아 방문해야 하는데,

    이걸 매번 찾으면서 가다가는 시간복잡도가 발생하여 메모리가 초과할 수 있습니다.

    따라서, 우선순위큐를 사용하는데,

    최소힙을 하나 생성하고, 정점 u를 방문해서, 인접한 정점 v의 거리를 갱신할 때마다,

    최소힙에 (dist[v], v) 쌍을 넣습니다.

    이렇게 하여 최소힙에서 먼저 나온 아이가 제일 작은 값이 될 거고, 이 값을 사용하면 됩니다.


    그럼 다익스트라 알고리즘을 구현해볼게요.



    Comments