Negatif ağırlıklı kenarlara izin vererek tek kaynaktan en kısa yolları bulur ve negatif çevrim tespit eder.
DAA notları, directed graph üzerinde single-source shortest path için Bellman-Ford and Dijkstra yaklaşımlarını ayırır. Bellman-Ford negatif ağırlıklı kenarlara izin verir; eğer kaynaktan erişilebilir negatif çevrim varsa çözüm olmadığını bildirir.
Algoritma tüm kenarları |V|-1 kez gevşetir. Her gevşetme, bir kenar üzerinden daha kısa mesafe bulunup bulunmadığını kontrol eder. Son ek turda hâlâ iyileşme varsa bu, kaynağa erişilebilir negatif ağırlıklı çevrim olduğu anlamına gelir.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1type Edge = { from: string; to: string; weight: number };23function bellmanFord(vertices: string[], edges: Edge[], source: string) {4 const distance = new Map(vertices.map((vertex) => [vertex, Infinity]));5 distance.set(source, 0);6 for (let pass = 1; pass < vertices.length; pass += 1) {7 for (const edge of edges) {8 const candidate = distance.get(edge.from)! + edge.weight;9 if (candidate < distance.get(edge.to)!) {10 distance.set(edge.to, candidate);11 }12 }13 }14 const hasNegativeCycle = edges.some((edge) => distance.get(edge.from)! + edge.weight < distance.get(edge.to)!);15 return { distance, hasNegativeCycle };16}Kaynak ve kenarları girin. Örnek: A; A>B>4, A>C>5, B>C>-2, C>D>3
Kaynak ve kenarları girin. Örnek: A; A>B>4, A>C>5, B>C>-2, C>D>3
En İyi Durum: O(VE)
Ortalama Durum: O(VE)
En Kötü Durum: O(VE)
O(V) - Bu algoritmanın karmaşıklığı belirtilmemiş.
Bellman-Ford Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: