출처: 이것이 취업을 위한 코딩테스트다.
다익스트라 알고리즘은 '한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우'에 사용할 수 있는 최단 경로 알고리즘이다.
플로이드워셜 알고리즘은 '모든 지점에서 다른 모든 지점까지의 최단경로를 모두 구해야 하는 경우'에 사용할 수 있는 알고리즘이다.
다익스트라 알고리즘은 단계마다 최단거리를 가지는 노드를 하나씩 반복적으로 선택한다. 그리고 해당 노드를 거쳐가는 경로를 확인하며, 최단거리 테이블을 갱신하는 방식으로 동작한다.
플로이드워셜 알고리즘 또한 단계마다 '거쳐가는 노드' 를 기준으로 알고리즘을 수행한다.
하지만 매번 방문하지 않은 노드중에서 최단거리를 갖는 노드를 찾을 필요가 없다는 점이 다르다.
노드의 개수가 N개일때, 알고리즘 상으로 N번의 단계를 수행하며, 단계마다 O(N^2)의 연산을 통해 '현재노드를 거쳐가는 모든 경로'를 고려한다. 따라서 플로이드 워셜 알고리즘의 시간 복잡도는 O(N^3)이다.
다익스트라 알고리즘에서는 출발노드가 1개이므로, 다른 모든 노드까지의 최단 거리를 저장하기 위해서 1차원 리스트를 이용한다.
반면에 플로이드 워셜 알고리즘은 다익스트라 알고리즘과는 다르게 2차원 리스트에 최단거리 정보를 저장한다는 특징이 있다.
모든 노드에 대해 다른 모든 노드도 가는 최단 거리 정보를 담아야 하기 때문이다.
다익스트라 알고리즘은 그리디알고리즘인데 플로이드 워셜 알고맂므은 다이나믹 프로그래밍 방식이다.
'개발 > 알고리즘' 카테고리의 다른 글
1389 케빈 베이컨의 6단계 법칙 (0) | 2020.09.29 |
---|---|
11403 경로 찾기 (0) | 2020.09.28 |
11052 카드 구매하기 (0) | 2020.09.28 |
14501 퇴사 (0) | 2020.09.26 |
11727 2xn 타일링 2 (0) | 2020.09.25 |