BFS (Breadth First Search)가 동일한 작업을 더 빠르게 수행 할 수 있다면 왜 Dijkstra의 알고리즘을 사용합니까?


109

둘 다 단일 소스에서 최단 경로를 찾는 데 사용할 수 있습니다. BFS는에서 실행되고 O(E+V)Dijkstra는 O((V+E)*log(V)).

또한 Dijkstra가 라우팅 프로토콜에서와 같이 많이 사용하는 것을 보았습니다.

따라서 BFS가 똑같은 일을 더 빨리 할 수 ​​있다면 왜 Dijkstra의 알고리즘을 사용합니까?

답변:


156

Dijkstra는 각 단계에 대해 1이 아닌 거리를 할당 할 수 있습니다. 예를 들어, 라우팅에서 거리 (또는 가중치)는 속도, 비용, 선호도 등에 의해 할당 될 수 있습니다. 그런 다음 알고리즘은 소스에서 순회 그래프의 모든 노드까지의 최단 경로를 제공합니다.

한편 기본적으로 그냥 작은 발견의 효과가 일어나는 모든 반복에 (당신이 당신의 응용 프로그램에서 전화를 원하는 링크, 가장자리) 한 "단계"로 검색 확장 BFS 단계의 수를 그 어떤에 도착하는 데 걸리는은 소스 ( "루트")에서 주어진 노드.


1
둘 다 동일한 결과, 즉 두 정점 사이의 경로를 생성하지만 dijkstra만이 최단 경로를 보장합니다.
Edwin

수락 된 답변, 두 번째 의견을 참조하십시오. 계산의 복잡성이 다른 이유를 설명하는 아주 좋은 방법 : stackoverflow.com/questions/25449781/...
jmcarter9t

23

여행 웹 사이트를 고려한다면 노드의 가중치 (거리) 때문에 Dijkstra의 알고리즘을 사용합니다.

모든 노드간에 동일한 거리를 고려한다면 BFS가 더 나은 선택입니다.

예를 들어, = 10, = 20, = = 5로 A -> (B, C) -> (F)주어진 간선 가중치를 고려하십시오 .A->BA->CB->FC->F

여기서 BFS를 적용하면 답은 ABF 또는 ACF가됩니다. 둘 다 최단 경로 (가장자리 수와 관련하여)이기 때문입니다. 그러나 Dijstra를 적용하면 답은 연결에 대한 가중치를 고려하기 때문에 ABF가됩니다. 통로.



4

구현 관점에서 볼 때, 다 익스트라의 알고리즘은 교환에 의해 정확하게 BFS과 같이 구현 될 수 queue로모그래퍼 priority queue.

출처

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.