Dijkstra'nın algoritması yalnızca tek bir kaynağınız olduğunda ve bir düğümden diğerine en küçük yolu bilmek istediğinizde kullanılır, ancak başarısız olur [negatif kenarlı grafiklerde]
ssprevious[v]
v
Dijkstra algoritmasının negatif kenarlı grafiklerde davranışı, tartışılan kesin değişkene bağlıdır. Algoritmanın bazı varyantları, Wikipedia'daki gibi, her zaman hızlı çalışır, ancak negatif kenarlar olduğunda en kısa yolları doğru hesaplamaz. Bu ders notlarındaki gibi diğer varyantlar her zaman en kısa yolları doğru olarak hesaplar (kaynaktan ulaşılabilen negatif bir döngü yoksa), ancak negatif kenarlar varsa en kötü durumda üssel süre gerektirebilir.
Floyd-Warshall'ın algoritması, tüm düğümlerden herhangi biri bir kaynak olduğunda kullanılır, bu nedenle en kısa mesafenin herhangi bir kaynak düğümden herhangi bir hedef düğüme ulaşmasını istersiniz. Bu sadece negatif döngüler olduğunda başarısız olur.
Bu doğru. Floyd-Warshall, tüm çiftler arasındaki en kısa yol algoritmasının bir örneğidir , yani her bir düğüm çifti arasındaki en kısa yolları hesaplar . Başka bir örnek "her bir v düğümü için, kaynak düğüm olarak Dijkstra'yı v ile çalıştırın". Birkaç tane daha var.
Bellman-Ford, tek bir kaynak olduğunda Dijkstra'nınki gibi kullanılır. Bu negatif ağırlıkları kaldırabilir ve çalışması tek bir kaynak hariç Floyd-Warshall'ınkiyle aynıdır, değil mi?
O ( V3)O ( V2E)O ( VE)
Daha fazla ayrıntı için, en sevdiğiniz algoritmalar ders kitabına başvurun. (Bunu yapmak zorunda Eğer bir favori algoritmalar ders kitabı değil mi?)