[알고리즘] 최단 경로 - 벨만 포드 알고리즘
최단 경로 알고리즘은 크게 두 가지로 분류된다.
- one-to-all : 하나의 정점에서 다른 모든 정점으로의 최단 경로를 구한다. (다익스트라 알고리즘, 벨만-포드 알고리즘)
- all-to-all : 모든 정점에 대해 자신을 제외한 다른 모든 정점으로의 최단 경로를 구한다. (플로이드-와샬 알고리즘)
벨만 포드 알고리즘은 one-to-all에 속하며, 이 외에도 다익스트라 알고리즘이 있다.
벨만 포드(Bellman-Ford) 알고리즘
벨만 포드 알고리즘의 특징은 다음과 같다.
- one-to-all (하나의 정점에서 다른 모든 정점으로의 최단 경로를 구한다.)
- 음의 가중치일 경우에도 사용이 가능하다. (다익스트라는 가중치가 음수이면 사용이 불가능)
- 시간 복잡도가
로 다익스트라보다는 느리다.
참고자료
[1] m.blog.naver.com/kks227/220796963742
'Algorithm > Theory' 카테고리의 다른 글
[알고리즘] 슬라이딩 윈도우(Sliding Window) 알고리즘 (0) | 2020.10.31 |
---|---|
[알고리즘] 투 포인터(Two Pointers) 알고리즘 (0) | 2020.10.26 |
[알고리즘] 최단 경로 - Dijkstra 알고리즘 (0) | 2020.10.25 |
[알고리즘] 최단 경로 - Floyd-Warshall 알고리즘 (0) | 2020.10.16 |
[알고리즘] 수열의 순열과 조합 (0) | 2020.09.26 |
댓글
이 글 공유하기
다른 글
-
[알고리즘] 슬라이딩 윈도우(Sliding Window) 알고리즘
[알고리즘] 슬라이딩 윈도우(Sliding Window) 알고리즘
2020.10.31슬라이딩 윈도우 알고리즘은 투 포인터 알고리즘과 개념이 유사하다. 투 포인터 알고리즘 같은 경우 left와 right라는 처음과 끝을 가리키는 포인터가 서로 독립적으로 움직이는데에 반해, 슬라이딩 윈도우 알고리즘은 처음과 끝을 가리키는 포인터가 서로 같이 움직인다. 슬라이딩 윈도우라는 이름 그대로 고정된 윈도우가 슬라이딩하는 것처럼 움직인다. 처음과 끝에 대해서 삽입과 삭제가 빈번히 이뤄지기 때문에 디큐(Deque) 자료구조가 대게 같이 사용된다. -
[알고리즘] 투 포인터(Two Pointers) 알고리즘
[알고리즘] 투 포인터(Two Pointers) 알고리즘
2020.10.261차원 배열이 주어졌을 때, 특정 연속된 구간의 합이 M이 되는 경우의 수를 구하려면 어떻게 해야 할까? 가장 단순하게 생각해볼 수 있는 방법은 2중 반복문을 돌리는 것이다. public class Main { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 2, 5, 3, 1, 1, 2}; // 크기가 10인 1차원 배열 int m = 5; // 연속된 구간의 합이 5인 경우를 찾는다. int count = 0; for (int i = 0; i < 10; i++) { int sum = arr[i]; for (int j = i + 1; j < 10; j++) { if (sum == m) { count++; } else if (sum >… -
[알고리즘] 최단 경로 - Dijkstra 알고리즘
[알고리즘] 최단 경로 - Dijkstra 알고리즘
2020.10.251. 개요 최단 경로 알고리즘은 크게 두 가지로 분류됩니다. one-to-all : 하나의 정점에서 다른 모든 정점으로의 최단 경로를 구한다. (Dijkstra 알고리즘, 벨만-포드 알고리즘) all-to-all : 모든 정점에 대해 자신을 제외한 다른 모든 정점으로의 최단 경로를 구한다. (Floyd-Warshall 알고리즘) Dijkstra 알고리즘은 one-to-all에 속하며, 이 외에도 벨만 포드 알고리즘이 있습니다. 벨만 포드는 음의 가중치일 때 사용되는데, 실세계에서 음의 가중치를 가질만한 것들이 잘 없기 때문에 잘 쓰이진 않습니다. 2. 다익스트라(Dijkstra) 알고리즘이란? Dijkstra 알고리즘의 특징은 다음과 같습니다. one-to-all (하나의 정점에서 다른 모든 정점으로의 … -
[알고리즘] 최단 경로 - Floyd-Warshall 알고리즘
[알고리즘] 최단 경로 - Floyd-Warshall 알고리즘
2020.10.161. Floyd-Warshall 알고리즘이란? 최단 경로는 크게 두 가지 경우로 나눌 수 있습니다. one-to-all : 하나의 출발지에 대해 나머지 모든 노드까지의 최단 경로를 구한다. (Dijkstra 알고리즘, 벨만-포드 알고리즘) all-to-all : 모든 노드에 대해 다른 모든 노드까지의 최단 경로를 구한다. (Floyd-Warshall 알고리즘) 플로이드 와샬은 all-to-all 에 대한 최단 경로를 구할 때 사용되는 알고리즘입니다. 5개의 노드가 있다고 가정했을 때, 1번 노드에서 2, 3, 4, 5번 노드까지의 최단 경로, 2번 노드에서 1, 3, 4, 5번 노드까지의 최단 경로, ….처럼 모든 노드에 대해 최단 경로를 구하기 때문에 비용을 저장하기 위해 2차원 배열이 필요합니다. …
댓글을 사용할 수 없습니다.