1. 程式人生 > >【費用流演算法:ZKW】

【費用流演算法:ZKW】

連續研究了幾天的費用流,一個屬於自己版本的zkw費用流出爐了。

zkw神牛發明的zkw演算法可以說是編寫簡單,速度也非常不錯。

個人還給zkw加了一個當前弧優化,KM演算法中的鬆弛變數優化與連續增廣優化,不過加了這些優化後zkw的全部過程也只有30行。

感覺上zkw就是優化了spfa求最短路的過程,因為spfa沒有充分利用上次求出來的結果最短路的結果,

zkw相當於迪傑斯特拉每次加入一條介於訪問過的點和沒有訪問過的點之間一條改進量最小的邊,所謂的改進量就是g[k]=dis[i]-dis[j]+w[k];

關於一開始就有負權的邊,ZKW牛本人說先求一次可行流再求一次最小費用流,這個我沒看懂。。大量隨機資料證明,只有正權的費用流用zkw是不會錯的,那麼根據題目的性質給負權的邊加上一個極大值就可以了。

不知道為什麼(難道是我隨出來的資料太水了),zkw在各種圖上有無法超越的優勢,隨機稠密圖比spfa快10倍左右,300個點50000條邊大約1.5s比spfa快8倍左右,10000個點100000條邊12s左右,spfa一分鐘沒跑出來不想等了。

經典費用流napkin: