최단 경로(Shortest Path)를 찾는 대표적인 알고리즘들 중 일부
벨만-포드(Bellman-Ford)
벨만포드는 가중치가 음수일 경우에도 사용가능 ( 다익스트라와의 차이점 )
- 초기화 : 간선 검사 순서 임의로 정하는 등등
- 앞서 정한 순서대로 모든 간선 확인하며 Relax ( 정점에 기존 보다 더 낮은 가중치로 도달할 수 있으면 값 갱신 == 최단거리 값 갱신) 해줌
- 정점의 개수 - 1 번 만큼 반복
시간복잡도 : ( 간선의 개수 ) * ( 정점의 개수 -1 ) => O ( 간선의 개수 * 정점의 개수 )
다익스트라(Dijkstra)
Greedy 알고리즘이라고 할 수 있음
그래프 내의 특정 정점에서 갈 수 있는 모든 정점들까지의 최단경로를 구하는 알고리즘
효율적, 실생활에서 많이 사용됨 ex) gps, 길찾기 서비스 등
But 간선의 가중치가 음수인 것이 있다면 사용불가
- 집합 S 를 정의하여 공집합으로 초기화한다. S는 값이 확정된 정점의 집합을 의미 또한 최단 경로를 표시하는 배열 초기화 (초기에는 최단 경로를 구하지 않은 상태이기에 무한대로 표시, 실제로는 아주 큰 값으로 사용)
- 시작 정점에서부터 인접한 정점으로 가는 가중치와 배열이 저장하고 있는 값과 비교 후 더 작은 값으로 갱신, 정점 S로 빼며 값을 확정시킨다.
- 이전 정점에서부터 거리가 가장 짧은 정점을 잡고 2번의 과정을 반복
- 2,3 번 과정을 모든 정점 확정시킬 때까지 반복한다.
시간복잡도 : 우선 순위 큐를 활용하여 거리가 가장 짧은 노드를 고르는 과정 O(log (간선의 개수))
을 정점의 개수 만큼 반복하기에 O(정점의 개수 * log (간선의 개수))
반응형
'미가공 필기(알고리즘)' 카테고리의 다른 글
210713 NP vs P (0) | 2021.07.13 |
---|---|
210712 Matrix Multiplication , 플로이드-와샬(Floyd-Warshall 알고리즘) (0) | 2021.07.13 |
210708 최소 신장 트리 with Kruskal, Prim 알고리 (0) | 2021.07.10 |
210708 너비 우선 탐색(BFS) & 깊이 우선 탐색(DFS) (0) | 2021.07.09 |
210707 DP - 배낭 문제 (Knapsack Problem) (0) | 2021.07.08 |
댓글