Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

최용우

다익스트라 vs 플로이드 와샬 vs 벨만포드 본문

알고리즘

다익스트라 vs 플로이드 와샬 vs 벨만포드

용우쨩 2022. 12. 17. 16:59

그래프 문제를 끄적이다 보면 단골로 등장하는 알고리즘이다.

 

3개의 특징을 구분지어 보고자 한다.

 

1) 다익스트라 : 하나의 정점에서 다른 어떤 정점까지의 최단거리를 구할 때

2) 플로이드 와샬 : 모든 정점에서 다른 어떤 정점까지의 최단거리를 구할 때

3) 벨만포드 : 하나의 정점에서 다른 어떤 정점까지의 최단거리 구할 때

 

딱 보아도 플로이드 와샬이 시간 복잡도가 가장 크다.

다익스트라 O(V+E) > 벨만포드 O(VE) > 플로이드 와샬 O(V3제곱)

세 알고리즘은 장단점이 있다. 그러나 특수한 경우에는 특정한 알고리즘을 쓰는 것이 좋다.

 

Case 1. 하나의 정점에서 어떤 정점의 최단거리를 구할 때(일반적인 경우) => 다익스트라

Case 2. 음의 가중치가 존재하거나 음의 사이클을 검출 할 때 => 벨만포드

Case 3. 어떤 정점에서 어떤 정점의 최단거리를 동시에 구해야할 때 => 플로이드 와샬

 

*사실 다익스트라도 음의 가중치가 존재하는 경우에도 사용가능하다.

 

이는 다익스트라의 구현 방식의 문제다. 

만약 한번 방문한 정점을 다시 방문하지 못하도록 구현한다면 음의 가중치를 반영하지 못한다.

중복 방문을 허용한다면 음의 가중치를 반영할 수 있으나 만약 음의 사이클을 이룬다면 무한루프에 빠진다.

 

따라서 문제 상황을 정확히 분석하고 어떤 알고리즘이 가장 효율적일지 그리고 어떻게 구현할지 고민해야 한다.

'알고리즘' 카테고리의 다른 글

백준[1721] 상자퍼즐(파이썬)  (1) 2023.03.01
백준[1749] 점수따먹기(파이썬)  (0) 2023.03.01
백준[1570] 오세준  (0) 2023.02.26
백준[1488] 숌트링 파이썬  (0) 2023.02.16
퀵(Quick) 정렬  (0) 2022.07.31