최단 경로 알고리즘
최단 경로 알고리즘은 두 개의 정점 사이의 가장 짧은 경로를 찾는 알고리즘이다. 이 알고리즘은 그래프의 가중치를 이용하여 경로를 선택하며, 가중치는 간선에 할달된 비용을 의미한다. 그래프에서 가장 짧은 경로를 찾는 것은 네트워크 라우팅, GPS 네비게이션, 물류 최적화 증 다양한 분야에서 활용 된다.
가장 대표적인 최단 경로 알고리즘으로는 다익스트라, 벨만-포드, 플로이드-워셜 알고리즘이 있다.
# 다익스트라(Dijkstra)
- 출발점에서 목표점까지의 최단 경로를 구하는 알고리즘을 말한다.
- 한 노드에서 다른 모든 노드로의 최단 경로를 구하는 데 사용한다.
- 간선에 음의 가중치가 없어야 한다.
- 그리디 + DP 형태를 가지고 있다.
- 알고리즘 복잡도 : O(ElogN) E: 간선, N:노드
- 순서
- A기준으로 주변 노드로 가는 가중치를 계산하여 배열에 입력
- 가장 작은 가중치를 가진 위치의 노드로 이동한다.
- 해당 노드에서 연결된 노드와 이전 노드의 가중치의 합이 다음 노드로 가는 가중치 보다더 작다면 해당 가중치로 업데이트 한다. (2와 3번 반복)
# 벨만 - 포드 (BellMan - Ford)
- 음수 간선이 포함되어 있어도 최단 경로를 구할 수 있다.
- 음수 사이클이 있으면 정상작동 하지 않는다.
- 매번 모든 간선을 확인하기 때문에 다익스트라에 비해 느리다.
- 알고리즘 복잡도 : O (VE)
- 음수 사이클을 구별하는 방법은 V 수 만큼 반복한 값과 V + 1 까지 반복한 값을 비교했을 때, 값이 다르다면 그래프가 음의 사이클에 의해 비정상 작동 한다고 할 수 있다.
# 플로이드 워셜(Floyd - Warshall)
- 모든 노드 간의 최단 경로를 구하는 알고리즘
- 음의 간선이 포함되어 있어도 사용 가능하다.
- 음수 사이클이 있으면 정상 작동 하지 않는다.
- 알고리즘 복잡도 : O(V^3)
최소 신장 트리(MST)
- MST : Minimun Sponning Tree
- 그래프 상의 모든 노드들을 최소 비용으로 연결하는 방법
- 크루스칼, 프림
# 크루스칼(Kruskal) 알고리즘
- 간선 중 최소 값을 가진 간선부터 연결
- 사이클 발생 시 다른 간선 선택
- 주로 간선 수가 적을 때 사용한다.
- 알고리즘 복잡도 : O(E log E)
# 프림(Prim) 알고리즘
- 임의의 노드에서 시작
- 연결된 노드의 간선 중 가장 낮은 가중치를 갖는 간선을 선택
- 간선의 개수가 많을 때 크루스칼 보다 유리함
- 알고리즘 복잡도 : O (E log V)
'Zero-Base > 자료구조-알고리즘' 카테고리의 다른 글
알고리즘 복잡도 (0) | 2023.04.04 |
---|---|
분할정복, 다이나믹, 백트래킹 (0) | 2023.04.02 |
투 포인터, 그리디 (0) | 2023.04.01 |
이진탐색(Binary Search) (0) | 2023.04.01 |
정렬(Sort) (0) | 2023.03.31 |