Bağlantı, akış ve rotalar · 31 / 53
Max-flow, residual graph ve matching
Anla → iz sür → uygula → gerekçelendir
3 dk okuma · uygulama için ayrıca zaman ayırAkışta her kenarda 0≤f≤capacity, source/sink dışındaki düğümlerde conservation korunur. Residual graf ileri kenarda kalan kapasiteyi, geri kenarda önceki kararı geri alma imkanını tutar. Geri kenar gerçek boru eklemek değildir; seçilmiş akışı yeniden yönlendirme modelidir.
Ford–Fulkerson augmenting path bulup bottleneck kadar iter. Tamsayı kapasitede sonlanır; genel irrational kapasite ve kötü yol seçiminde sorun çıkabilir. Edmonds–Karp BFS ile en az kenarlı residual yolu seçer ve O(VE²) sınır verir. Dinic level graph ve blocking flow kullanır; daha ileri veri yapıları farklı sınırlar sağlar.
Max-flow=min-cut teoremi sonucu doğrular: source'tan residual erişilebilir küme bir kesit üretir. Bipartite matching source→sol→sağ→sink unit capacities ile modele çevrilir. Hopcroft–Karp doğrudan matching için O(E√V) sağlar. Min-cost flow başka problemdir; sadece en büyük akış en ucuz akışı garanti etmez.
Geri kenar neden zorunlu?
Bir flow seçimi daha sonra değiştirilebilir. u→v üzerinden f birim gönderildiğinde residual graph'ta ileri kapasite azalır, v→u ters kapasitesi artar. Bu ters edge fiziksel boru eklemek değil, önceki kararı geri alabilme hakkıdır. Augmenting path bottleneck'i yolun minimum residual kapasitesidir; her edge bu miktarla güncellenir.
Source ve sink dışında flow conservation sağlanır. Her edge için 0≤f≤c koşulu kontrol edilir. Undirected capacity veya parallel edges farklı representation ister; tek adjacency matrix hücresine tüm semantiği sıkıştırmak ters/gerçek edge'leri karıştırabilir.
Max-flow/min-cut theorem: daha fazla augmenting path kalmadığında residual'da source'tan reachable küme bir cut oluşturur ve flow değeri bu cut kapasitesine eşittir. Edmonds-Karp her augmenting path'i BFS ile seçer; O(VE²) bound yol uzunluklarının düzenine bağlıdır, yalnız integral capacity değerine değil. Ford-Fulkerson arbitrary path seçimi irrational capacity modelinde termination sorunu taşıyabilir.
Temel: Her augmentation sonrası conservation doğrula. Orta: Reverse edge kullanılmadan bulunamayan bir iyileştirme örneği kur. İleri: Bipartite matching'i unit-capacity flow'a dönüştür; matching witness ve min-cut certificate'ını ayrı döndür.
Adım adım iz sürme
s→a3,a→t2,s→t1: s-a-t bottleneck2, doğrudan1; max3. Kesit {s,a} kapasitesi2+1=3 sonucu sertifikalar.
Maliyet ve varsayımlar
Edmonds–Karp O(VE²); integer Ford–Fulkerson basit sınırı O(E·|f*|), kapasitenin bit uzunluğunda polinom değildir.
Çalıştırılabilir örnek
Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.
# A residual augmentation along s -> a -> t.
r = {("s","a"):3, ("a","t"):2, ("a","s"):0, ("t","a"):0}
path = [("s","a"),("a","t")]
bottleneck = min(r[e] for e in path)
for u,v in path:
r[u,v] -= bottleneck
r[v,u] += bottleneck
assert r["a","s"] == 2 and r["a","t"] == 0KAVRADIĞINI KONTROL ET
Sıra sende
Reverse residual edge'+'’leri kaldırırsan ne olur?
Çözümün mantığını göster
Önceki yanlış yol seçimini geri alamazsın; algoritma maksimumdan önce takılabilir. Residual iki yönlü güncelleme zorunludur.
Bir adım ileri
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.
Temel kaynaklar ve ders notları
Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.
Jeff Erickson · Algorithms ↗MIT 6.046J · Design and Analysis ↗