Навіщо використовувати алгоритм Дейкстри, якщо перший пошук за шириною (BFS) може зробити те ж саме швидше?


109

Обидва можуть бути використані для пошуку найкоротшого шляху з одного джерела. BFS працює O(E+V), а Dijkstra працює O((V+E)*log(V)).

Крім того, я бачив, як Dijkstra багато використовував, як у протоколах маршрутизації.

Отже, навіщо використовувати алгоритм Дейкстри, якщо BFS може зробити те ж саме швидше?

Відповіді:


156

Dijkstra дозволяє призначити відстані, окрім 1, для кожного кроку. Наприклад, при маршрутизації відстані (або ваги) можуть бути призначені за швидкістю, вартістю, перевагою тощо. Потім алгоритм дає вам найкоротший шлях від вашого джерела до кожного вузла пройденого графіка.

Тим часом BFS в основному просто розширює пошук на один "крок" (посилання, край, як би ви хочете назвати це у своїй заявці) на кожну ітерацію, яка, як наслідок, призводить до знаходження найменшої кількості кроків, які потрібно зробити, щоб дістатись до будь-якого заданий вузол від вашого джерела ("root").


1
Обидва дадуть однакові результати, тобто шлях між двома вершинами, але лише dijkstra гарантує найкоротший шлях.
Едвін

Дивіться прийняту відповідь, другий коментар. Дуже хороший спосіб пояснити , чому обчислювальна складність відрізняється: stackoverflow.com/questions/25449781 / ...
jmcarter9t

23

Якщо ви розглядаєте веб-сайти для подорожей, вони використовують алгоритм Дейкстри через ваги (відстані) на вузлах.

Якщо ви будете враховувати однакову відстань між усіма вузлами, то BFS - кращий вибір.

Наприклад, розглянемо A -> (B, C) -> (F)з вагами ребер, заданими A->B= 10, A->C= 20, B->F= C->F= 5.

Тут, якщо ми застосуємо BFS, відповідь буде ABF або ACF, оскільки обидва є найкоротшими шляхами (щодо кількості ребер), але якщо ми застосуємо Dijstra, відповідь буде ABF лише тому, що вона враховує ваги на підключеному шлях.



4

З точки зору реалізації, алгоритм Dijkstra може бути реалізований точно так само, як BFS, замінивши на queuea priority queue.

Джерело

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.