1. 최단 경로 문제란?
- 최단 경로 문제란 두 노드를 잇는 가장 짧은 경로를 찾는 문제
- 가중치 그래프에서 간선의 가중치 합이 최소가 되도록 하는 경로를 찾는 것이 목적
[최단 경로 문제 종류]
1. 단일 출발 및 단일 도착 최단 경로 문제
- 그래프 내의 특정 노드 u에서 출발, 또다른 특정 노드 v에 도착하는 가장 짧은 경로를 찾는 문제
2. 단일 출발 최단 경로 문제
- 그래프 내의 특정 노드 u와 그래프 내 다른 노드 각각의 가장 짧은 경로를 찾는 문제
3. 전체 쌍 최단 경로 문제
- 그래프 내의 모든 노드 쌍 (u, v)에 대한 최단 경로를 찾는 문제
2. 최단 경로 알고리즘 - 다익스트라 알고리즘
- 최단 경로 문제 종류 중, 2번에 해당
- 하나의 정점에서 다른 모든 정점 간의 각각 가장 짧은 거리를 구하는 문제
[다익스트라 알고리즘 로직]
- 첫 정점을 기준으로 연결되어 있는 정점들을 추가해가며, 최단 거리를 갱신하는 기법
- 다익스트라 알고리즘은 너비우선탐색(BFS)와 유사
- 첫 정점부터 각 노드간의 거리를 저장하는 배열을 만든 후,
- 첫 정점의 인접 노드 간의 거리부터 먼저 계산하면서
- 첫 정점부터 해당 노드간의 가장 짧은 거리를 해당 배열에 업데이트
다익스트라 알고리즘의 다양한 변형 로직이 있지만,
가장 개선된 우선순위 큐를 사용하는 방식에 집중해서 설명하기로 함
- 우선순위 큐를 활용한 다익스트라 알고리즘
- 우선순위 큐는 MinHeap 방식을 활용해서, 현재 가장 짧은 거리를 가진 노드 정보를 먼저 꺼내게 됨
- 1) 첫 정점을 기준으로 배열을 선언하여 첫 정점에서 각 정점까지의 거리를 저장
- 초기에는 첫 정점의 거리는 0, 나머지는 무한대로 저장 (inf 라고 표현함)
- 우선순위 큐에 (첫 정점, 거리 0)만 먼저 넣음
- 2) 우선순위 큐에서 노드를 꺼냄
- 처음에는 첫 정점만 저장되어 있으므로, 첫 정점이 꺼내짐
- 첫 정점에 인접한 노드들 각각에 대해, 첫 정점에서 각 노드로 가는 거리와 현재 배열에 저장되어 있는 첫 정점에서 각 정점까지의 거리를 비교
- 배열에 저장되어 있는 거리보다, 첫 정점에서 해당 노드로 가는 거리가 더 짧을 경우, 배열에 해당 노드의 거리를 업데이트
- 배열에 해당 노드의 거리가 업데이트된 경우, 우선순위 큐에 넣는다
- 결과적으로 너비 우선 탐색 방식과 유사하게, 첫 정점에 인접한 노드들을 순차적으로 방문하게 됨
- 만약 배열에 기록된 현재까지 발견된 가장 짧은 거리보다, 더 긴 거리(루트)를 가진 (노드, 거리)의 경우에는 해당 노드와 인접한 노드간의
- 3) 2번의 과정을 우선순위 큐에 꺼낼 노드가 없을 때까지 반복
'~2023.02 > 알고리즘' 카테고리의 다른 글
[기본 정렬 알고리즘 #2] 삽입 정렬 (0) | 2022.02.28 |
---|---|
[기본 정렬 알고리즘 #1] 버블 정렬 (0) | 2022.02.28 |
[탐색 알고리즘 #3] 코딩 테스트 연습문제 풀이 (0) | 2022.02.25 |
[탐색 알고리즘 #2] 순차 탐색(Sequential Search) (0) | 2022.02.25 |
[탐색 알고리즘 #1] 이진 탐색(Binary Search) (0) | 2022.02.25 |