Skip to content

Latest commit

 

History

History
46 lines (29 loc) · 3.05 KB

bellman_ford.md

File metadata and controls

46 lines (29 loc) · 3.05 KB

벨만 포드 알고리즘

벨만 포드 알고리즘이란

벨만 포드 알고리즘은 한 노드에서 다른 노드까지의 최단 거리를 구하는 알고리즘이다.

간선의 가중치가 음수일 때도 최단 거리를 구할 수 있다.

다익스트라 알고리즘도 최단 거리를 구하는 알고리즘인데. 벨만 포드는 또 뭘까? 라는 생각이 들 수 있다. 다익스트라와 벨만 포드의 차이점에 대해서 알아보자

벨만포드 vs 다익스트라

위 그림을 보자 1번 노드에서 3번 노드로 가는 최단 거리를 구한다라고 가정하자. 우리의 육안으로 보면 1 -> 3으로 가는 경로는 2가지 이다.

1 -> 3 cost 10 , 1 -> 2 -> 3 cost 5 2가지로 1번 노드에서 3번 노드로 가는 최단 거리는 5다.

이제 육안으로 보지 않고 다익스트라 알고리즘을 사용하게 되면 매번 방문하지 않은 노드 중에서 최단거리가 가장 짧은 노드를 선택하므로 1번 -> 3번 cost : 10의 경로를 선택하게 된다. 이처럼 음수 간선이 존재하면 최단 거리를 찾을 수 없는 상황이 발생한다.

반면에 벨만 포드 알고리즘을 사용하게 되면 매번 모든 간선을 전부 확인하므로 1 -> 2 -> 3 cost 5 의 경로를 선택하여 최단거리를 찾을 수 있게된다.

다익스트라 알고리즘

  • 매번 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택하여 한 단계씩 최단 거리를 구해나간다.
  • 음수 간선이 없다면 최적의 해를 찾을 수 있다.
  • 시간 복잡도가 빠르다 O(ElogV)

벨만 포드 알고리즘

  • (정점 1)번의 매 단계마다 모든 간선을 전부 확인하면서 모든 노드간의 최단거리를 구해나간다. 다익스트라와의 차이점은 매 반복마다 모든 간선을 확인한다는 것이다. (다 익스트라는 방문하지 않은 노드 중에서 최단 거리가 가장 가까운 노드만을 방문)
    • 다익스트라 알고리즘에서의 최적의 해를 항상 포함하게 한다.
  • 음수 간선이 있어도 최적의 해를 찾을 수 있다.
  • 시간 복잡도가 느리다 O(VE)

모든 간선의 비용이 양수일때는 다익스트라, 음수 간선이 포함되어있으면 벨만포드를 사용하면 된다.

벨만 포드 알고리즘 수행 과정

  1. 출발 노드를 설정한다.
  2. 최단 거리 테이블을 초기화한다.
  3. 다음 과정을 (V - 1)번 반복한다.
    1. 모든 간선 E개를 하나씩 확인한다.
    2. 각 간선을 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블을 갱신한다.
  4. 만약 음수 간선 순환이 발생하는지 체크하고 싶다면 3번 과정을 한 번 더 수행한다. -> 이때 최단 거리 테이블이 갱신된다면 음수 간선 순환이 존재하는 것이다.