COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

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ır

Akış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.

Python 3
# 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"] == 0

KAVRADIĞ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

  1. Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
  2. Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
  3. 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 ↗
İlerlemeden önce alıştırmayı çöz.