[SP#1] 다익스트라(Dijkstra)

ISMINIMIN·2024년 3월 19일

알고리즘

목록 보기
6/8
post-thumbnail

다익스트라(Dijkstra)

음의 가중치가 없는 그래프에서 여러 개의 노드가 있을 때, 특정한 한 정점에서 출발해 다른 모든 정점으로 가는 최단 거리를 구하는 알고리즘이다.


다익스트라 특징

  • 방문하지 않은 노드 중에서 가장 비용이 적은 노드를 선택한다.
    → 그리디
  • 해당 노드로부터 갈 수 있는 노드들의 비용을 갱신한다.
    → 다이나믹 프로그래밍

주의할점

  • 가중치는 항상 양수여야 한다.
  • 출발 노드와 도착 노드 간의 최단 거리를 구하는 알고리즘이지만, 실제 완성된 최단 거리 배열에는 출발 노드와 모든 노드 간의 최단 거리가 기록되어 있다.

다익스트라 탐색과정

  1. 출발 노드를 설정한다.
  2. 최단 거리 배열을 초기화한다.
    (출발 노드는 0, 이외의 노드는 무한(적당히 큰 값)으로 초기화)
  3. 방문하지 않은 노드 중에서 가중치가 가장 작은 노드를 선택한다.
  4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산해 최단 거리 배열을 업데이트한다.
  5. 과정 3번~4번을 반복하며 최단 거리 배열을 완성한다.

최단 거리 업데이트 방법
Min(해당 노드의 최단 거리 배열값 + 가중치, 연결 노드의 최단거리 배열값)


다익스트라 구현방법

  • 이차원 배열 사용(시간복잡도 - O(V^2))
  • 우선순위 큐 사용(시간복잡도 - O(ElogV))

간선 수 : E / 노드 수 : V

profile
@minzdev

0개의 댓글