기록하는삶

[자료구조/알고리즘] 벨만-포드(Bellman-Ford) 알고리즘 본문

AI/자료구조, 알고리즘

[자료구조/알고리즘] 벨만-포드(Bellman-Ford) 알고리즘

mingchin 2022. 2. 6. 14:11
728x90
반응형

다익스트라, 플로이드-와샬과 함께 노드와 간선, 간선의 비용이 주어진 상황에서 최단 거리를 구할 수 있는 알고리즘 중 하나이다. 다익스트라와 작동 방법이 유사하지만, 존재하는 모든 간선에 대해 최단 거리를 업데이트하는 시행을 (노드의 개수 -1)만큼 진행하는 것이 그 특징이다. 또한 노드의 개수만큼 업데이트한다면 경로 내에 음수 간선의 순환이 있는지 여부도 파악할 수 있다.

 

[동작 과정]

① 출발 노드 설정 및 최단 거리 테이블 초기화(충분히 큰 숫자로, 시작 노드는 0으로 초기화)

② 아래의 과정을 N-1번 반복

    ②-1: 전체 간선 E개에 대하여 확인

    ②-2: 해당 간선을 이용해 이동하는 것이 더 짧은 경로라면, 이를 이용해 최단 거리 테이블 갱신

③ ②의 과정을 한 번 더 수행하여, 이때 최단거리 테이블이 업데이트 된다면 음수 간선의 순환이 있다고 판단할 수 있다.(N개의 노드를 거쳐 이동할 때 음수 간선의 순환이 없다면 최대 N-1개의 간선 내에 최단거리가 나와야 하는데, N번째 시행에도 최단거리 테이블이 업데이트 된다는 것은 음수 간선 순환이 존재함을 의미한다.)

 

구현 예시, 문제 풀이: https://mingchin.tistory.com/310

 

[코딩 테스트 연습(파이썬/Python)] 백준(BOJ) 1865번 _ 웜홀

https://www.acmicpc.net/problem/1865 1865번: 웜홀 첫 번째 줄에는 테스트케이스의 개수 TC(1 ≤ TC ≤ 5)가 주어진다. 그리고 두 번째 줄부터 TC개의 테스트케이스가 차례로 주어지는데 각 테스트케이스의 첫

mingchin.tistory.com

코드에서 알 수 있듯 다익스트라와 비슷하게 한 노드에서 다른 모든 노드까지의 거리를 업데이트 해나가며, 노드의 방문 여부 확인을 해당 노드까지의 거리가 INF인지 아닌지를 확인하는 것으로 대체한다.

 

노드의 개수 N, 간선의 개수 E에 대하여 O(N*E)의 시간복잡도를 가진다.

728x90
반응형