[이것이 코딩테스트다] Chap09. 최단경로

SunYerim·2023년 1월 26일
0

자료구조, 알고리즘

목록 보기
11/16
post-thumbnail

1. 가장 빠른 길 찾기

가장 빠르게 도달하는 방법

'최단경로 알고리즘'은 가장 짧은 경로를 찾는 알고리즘이다. 그래서 '길 찾기'문제라고도 불림.
'최단경로 문제'는 보통 그래프를 이용해 표현하는데, 각 지점은 그래프에서 "노드"로 표현되고, 지점간 연결된 도로는 그래프에서 "간선"으로 표현된다.

위의 그림과 같은 그래프라고 생각하면 된다.

최단거리 알고리즘 ==> 다익스트라 최단 경로 알고리즘, 플로이드 워셜, 벨만 포드 알고리즘 !!!

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

그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘. (Greedy Algorithm으로 분류된다. => 가장 비용이 적은 노드를 선택해서 임의의 과정을 반복하기 때문)

  • '음의 간선'이 없을 때 정상적으로 동작한다!
    -음의 간선: 0보다 작은 값을 가지는 간선을 의미함.

알고리즘의 원리

  1. 출발 노드를 설정한다.
  2. 최단 거리 테이블을 초기화한다.
  3. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택한다.
  4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블을 갱신한다.
  5. 위 과정에서 3과 4번을 반복한다.

다익스트라 알고리즘은 최단 경로를 구하는 과정에서 '각 노드에 대한 현재까지의 최단 거리' 정보를 항상 1차원 리스트에 저장하며 리스트를 계속 갱신한다는 특징이 있다.
방문하지 않은 노드 중에서 현재 최단 거리가 가장 짧은 노드를 확인해 그 노드에 대하여 4번 과정을 수행한다는 점에서 그리디 알고리즘으로 볼 수 있음.

다익스트라 알고리즘을 구현하는 방법

  1. 구현하기 쉽지만 느리게 동작하는 코드
  2. 구현하기에 조금 더 까다롭지만 빠르게 동작하는 코드
profile
내 안에 있는 힘을 믿어라.

0개의 댓글