[leetcode] 743. Network Delay Time

강아지 이름은 봄이·2024년 1월 27일

🏃 다익스트라 최단 경로 알고리즘

특정 노드에서 출발해서 다른 모든 노드로 가는 최단 경로를 계산한다.

  • 가중치가 있는 그래프에서 가장 짧은 경로를 찾을 때 사용하는 알고리즘
  • 다익스트라 알고리즘의 가중치는 양수여야 한다.
  • 다익스트라 알고리즘은 매 상황에서 비용이 가장 적은 노드를 선택하는 과정이 반복되므로 그리디 알고리즘으로 분류된다.
  • 거리를 기록하는 테이블에 거리값을 매 번 최소값으로 업데이트하므로 DP로도 분류된다.

🌟 다익스트라 알고리즘 동작 과정

  1. 준비하기
  • 거리 기록 테이블을 INF로 초기화한다.
  • 노드를 방문했는지 판단하는 visited 리스트를 모두 False로 초기화한다.
    (노드를 방문했다 = 해당 노드의 최단 경로를 발견했다 = 리스트 값을 True로 바꿔준다 = 땅땅땅! 출발 노드로부터 지금 노드까지의 최단거리이다 = 더이상 탐색하지 않는다)
  1. 출발 노드를 설정한다. 출발 노드를 선택했다면 거리 기록 테이블에서 출발 노드는 0으로 바꿔준다. (출발노드에서 출발노드까지 거리는 0이므로)
    땅땅땅! 이 노드는 더 이상 최단경로를 볼 필요가 없으니 visited 리스트에서 True로 바꿔준다
  2. 출발 노드와 연결된 노드들의 거리값을 갱신해준다.
  3. 갱신된 노드들 중에서 거리가 가장 작은 노드를 선택한다.
    -> 땅땅땅! (visited = True로 바꿔주고) 방금 선택한 노드는 출발 노드에서 시작하여 가장 짧게 이동할 수 있는 노드이다.
  4. 3에서 선택한 노드와 연결된 노드들의 거리값을 갱신해준다.

    어떻게 갱신해주냐.

  • (1)이전에 기록되어있던 값(2)출발지~3에서 선택한 노드 ~ 연결노드 두 가지 선택지 중에서 뭐가 더 거리가 작은지 비교하고, 작은 값으로 업데이트 해주면 된다.
  1. 업데이트된 노드들 중에서 가장 작은 노드를 선택한다.
    -> 땅땅땅! (visited = True로 바꿔주고) 출발지로부터 6번에서 선택한 노드까지 가장 짧게 걸리는 최단 거리를 발견했다!
  2. 4번~5번 과정을 계속 반복해주면 된다. 언제까지? 더 이상 탐색할 노드가 없으 때까지!

그림으로 한 번 더 살펴보자

😽 도움을 받은 사이트

https://blog.naver.com/ndb796/221234424646

0개의 댓글