Bellman Ford ile negatif döngü elde etme


20

Yönlendirilmiş ağırlıklı bir grafikte negatif bir döngü bulmam gerekiyor. Bellman Ford algoritmasının nasıl çalıştığını biliyorum ve bana ulaşılabilir bir negatif döngü olup olmadığını söylüyor. Ancak bunu açıkça adlandırmaz.

Döngünün gerçek yolunu nasıl alabilirim ?v1,v2,vk,v1

Standart algoritmayı uyguladıktan sonra zaten yinelemeleri yaptık ve daha fazla iyileştirme mümkün olmamalıdır. Bir düğüme olan mesafeyi hala azaltabilirsek, negatif bir döngü vardır.n1

Benim fikrim: Yolu hala geliştirebilecek kenarı bildiğimiz ve her bir düğümün öncüsünü bildiğimiz için, tekrar karşılaşana kadar bu kenardan geriye doğru izleyebiliriz. Şimdi döngümüzü yapmalıyız.

Ne yazık ki, bunun doğru olup olmadığını söyleyen bir kağıt bulamadım. Peki, aslında böyle mi çalışıyor?

Edit: Bu örnek fikrim yanlış olduğunu kanıtlıyor. Aşağıdaki grafik göz önüne alındığında, düğümden Bellman-Ford'u çalıştırıyoruz .1

resim açıklamasını buraya girin

Kenarları sırasıyla . yinelemelerinden sonra düğüm mesafeleri elde edilir:n - 1a,b,c,dn1
1:5
3 : - 152:30
3:15

ve üst tablo: üst öğesi üst öğesi üst öğesi
313
3 3 223
32

Şimdi, durumu tekrarında inci düğümüne mesafesi görüyoruz yine kenar kullanılarak geliştirilebilir . Bu yüzden bir negatif döngü var ve biliyoruz onun bir parçası olduğunu.1 a an1aa

Ancak, ana tablodan geri dönerek, başka bir negatif döngü sıkışıp kalır ve daha asla karşılaşmazız .ac,da

Bu sorunu nasıl çözebiliriz?

Yanıtlar:


14

Çoğunlukla haklısın. Sadece bir ek daha. Döngüyü bulmaya çalışırken önceki zincire geri döndüğünüzde, başlangıç ​​tepe veya şimdiye kadar gördüğünüz önceki zincirde daha önce görülen başka bir tepe noktasına . Temel olarak, öncekileri kullanarak geriye doğru giderken bir döngü algıladığınızda köşeleri durdurur ve çıkarırsınız.v1

Makalelere gelince, basit bir Google araması Xiuzhen Huang: Negatif Ağırlık Döngüsü Algoritmaları sağlar . Bir avantaj olarak, onlar da negatif ağırlık döngülerini bulmak için başka bir algoritma listelemek değil kaynak tepe ulaşılabilecek .s


bağlantı koptu.
human.js


Sadece Huang'ın fikrini kullandım, ama neden yeni bir kaynak düğüm ve yeni bir hedef ( s've t') eklediğini anlamıyorum . Bana öyle geliyor ki, mevcut tüm köşelere hangi uzunlukta olursa olsun bağlanan yeni bir kaynak düğüm, tüm döngüleri artıracaktı.
AbuNassar

0

Örneğin, fikrinizle çelişmiyor. Gerçekten de negatif bir döngü buldunuz. Örneğinizin gösterdiği fikir, kaynak tepe noktasının negatif döngüdeki bir düğüm olmayabilir.

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.