Oba mogą być użyte do znalezienia najkrótszej ścieżki z jednego źródła. BFS wbiega O(E+V)
, a Dijkstra wbiega O((V+E)*log(V))
.
Poza tym widziałem, że Dijkstra używał bardzo podobnie jak w protokołach routingu.
Zatem po co używać algorytmu Dijkstry, skoro BFS może zrobić to samo szybciej?
źródło
Jeśli weźmiesz pod uwagę witryny turystyczne, używają one algorytmu Dijkstry ze względu na wagi (odległości) w węzłach.
Jeśli weźmiesz pod uwagę tę samą odległość między wszystkimi węzłami, lepszym wyborem będzie BFS.
Na przykład rozważmy
A -> (B, C) -> (F)
z wagami krawędzi podanymi przezA->B
= 10,A->C
= 20,B->F
=C->F
= 5.Tutaj, jeśli zastosujemy BFS, odpowiedzią będzie ABF lub ACF, ponieważ obie są najkrótszymi ścieżkami (pod względem liczby krawędzi), ale jeśli zastosujemy Dijstrę, odpowiedzią będzie ABF tylko dlatego, że uwzględnia wagi na podłączonych ścieżka.
źródło
Algorytm Dijkstry
Źródło: https://cs.stanford.edu/people/abisee/gs.pdf
źródło
Z punktu widzenia implementacji algorytm Dijkstry można zaimplementować dokładnie tak, jak BFS, zamieniając
queue
plikpriority queue
.Źródło
źródło