Genişlik İlk Arama (BFS) aynı şeyi daha hızlı yapabiliyorsa neden Dijkstra Algoritmasını kullanalım?


110

Her ikisi de tek kaynaktan en kısa yolu bulmak için kullanılabilir. BFS devreye O(E+V)girerken, Dijkstra devreye giriyor O((V+E)*log(V)).

Ayrıca Dijkstra'nın yönlendirme protokollerine çok benzer şekilde kullanıldığını gördüm.

Öyleyse, BFS aynı şeyi daha hızlı yapabiliyorsa neden Dijkstra algoritmasını kullanalım?

Yanıtlar:


156

Dijkstra, her adım için 1'den farklı mesafelerin atanmasına izin verir. Örneğin, yönlendirmede mesafeler (veya ağırlıklar) hız, maliyet, tercih, vb. Tarafından atanabilir. Daha sonra algoritma size kaynağınızdan çapraz grafikteki her düğüme giden en kısa yolu verir.

Bu arada BFS, temelde aramayı her yinelemede bir "adım" (bağlantı, kenar, uygulamanızda ne adlandırmak isterseniz) genişletir ve bu, herhangi birine ulaşmak için gereken en küçük adımı bulma etkisine sahiptir. kaynağınızdan verilen düğüm ("kök").


1
Her ikisi de aynı sonuçları verecektir, yani iki köşe arasındaki bir yol, ancak yalnızca dijkstra en kısa yolu garanti edecektir.
Edwin

Kabul edilen cevaba, ikinci yoruma bakın. Hesaplama karmaşıklığının neden farklı olduğunu açıklamanın çok güzel bir yolu: stackoverflow.com/questions/25449781/…
jmcarter9t

24

Seyahat web sitelerini düşünürseniz, bunlar düğümlerdeki ağırlıklar (mesafeler) nedeniyle Dijkstra algoritmasını kullanır.

Tüm düğümler arasında aynı mesafeyi dikkate alacaksanız, BFS daha iyi bir seçimdir.

Örneğin, = 10, = 20, = = 5 A -> (B, C) -> (F)ile verilen kenar ağırlıklarını düşünün .A->BA->CB->FC->F

Burada, BFS'yi uygularsak, cevap ABF veya ACF olacaktır, çünkü her ikisi de en kısa yollar (kenar sayısına göre), ancak Dijstra'yı uygularsak, yanıt yalnızca bağlı olanın ağırlıklarını dikkate aldığı için ABF olacaktır. yol.



4

Uygulama açısından, Dijkstra'nın algoritması queue, bir priority queue.

Kaynak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.