최단 경로 문제란?
벨만포드 알고리즘을 다룬 여기 문서 참고
다익스트라 알고리즘
- 하나의 시작점에서 도착점으로 가는 최단 경로를 찾는 알고리즘
- 간선이 음의 값을 가져선 안 된다
<pseudo code>
1. graph, weight, start 가 주어진다
2. start(자기 자신)까지의 거리는 0으로 상정한다
3. 모든 vertex 들을 queue에 넣고 반복한다
- queue에 들어간 v 중에서 가장 작은 값을 찾아 뽑는다
- 뽑힌 v에 대해서 relaxation 수행
예제
현재 Q에서 가장 작은 값을 찾는다 --> $s$
$s$의 인접 노드 중에서 더 작은 $y$ 선택
$y$에서 relaxation 시행, 가장 작은 $z$ 선택
$z$에서 relaxation 시행, Q에서 가장 작은 $t$로 다시 돌아감
$t$에서 relax 시행했을 때 $x$로 가는 경로값이 업데이트 된다
수행시간
배열로 구현한 경우 ---> $O(V^{2})$
힙으로 구현한 경우 ---> $O(V\log V+ E\log V)$
피보나치 힙으로 구현한 경우 ---> $O(V\log V+ E)$
'컴퓨터 > 알고리즘&자료구조' 카테고리의 다른 글
최소 신장 트리 구하기 : 크루스칼(Kruskal) 알고리즘 (0) | 2022.10.05 |
---|---|
합집합 찾기(union-find) (0) | 2022.10.05 |
자료구조 : 힙(heap) (0) | 2022.09.27 |
최단 경로 문제: 벨만포드 알고리즘 (1) | 2022.09.26 |
빅오표기법(Big-O notation)과 시간복잡도 (0) | 2022.09.25 |