벨만-포드 알고리즘(Bellman-Ford Algorithm)은 단일 출발점에서 모든 정점까지의 최단 경로(Shortest Path)를 찾는 알고리즘으로, 음수 가중치(negative weights)가 포함된 그래프에서도 사용 가능합니다.
벨만-포드 알고리즘은 모든 간선을 여러 번 반복적으로 확인하며 최단 경로를 점진적으로 업데이트합니다.
작동 순서
1. 초기화:
distance
)를 0으로 설정. 반복(Relaxation):
distance[u] + weight(u, v) < distance[v]
u
는 간선의 출발점, v
는 도착점, weight(u, v)
는 간선의 가중치. 음수 사이클 검출:
결과 출력:
그래프:
초기 상태:
distance
: {A: 0, B: ∞, C: ∞, D: ∞} 단계별 계산 과정
1. Step 1: 모든 간선 확인:
A → B: 0 + 1 < ∞
→ 업데이트: B = 1
A → C: 0 + 4 < ∞
→ 업데이트: C = 4
B → C: 1 - 2 < 4
→ 업데이트: C = -1
B → D: 1 + 2 < ∞
→ 업데이트: D = 3
C → D: -1 + 3 < 3
→ 업데이트: D = 2
결과: {A: 0, B: 1, C: -1, D: 2}
결과:
시간 복잡도:
음수 가중치 처리:
결과:
장점 | 단점 |
---|---|
음수 가중치를 가진 그래프에서도 작동. | 시간 복잡도가 높아, 큰 그래프에서는 비효율적. |
음수 사이클을 탐지 가능. | 다익스트라에 비해 느리고, 메모리 소모가 큼. |
구현이 간단하고 직관적. | 양수 가중치 그래프에서는 다익스트라보다 비효율적. |
네트워크 라우팅:
금융 및 경제 모델링:
교통 및 물류 문제:
벨만-포드 알고리즘은 다익스트라 알고리즘이 처리하지 못하는 음수 가중치 그래프에서도 작동하며, 음수 사이클 탐지가 가능해 다양한 응용 분야에서 사용됩니다. 다만, 시간 복잡도가 높아 큰 그래프에서는 비효율적일 수 있어, 상황에 따라 다익스트라 또는 다른 알고리즘과 비교하여 선택해야 합니다.