网络流自学笔记

说实在的,不知道以我现在的水平干拔网络流合不合适。
整个网络流可以理解为一个流水系统。
每一条边与最短路不同,是代表约束。
至于准确概念我当然不很懂。
Wiki上太多了。

  • 最大流

    EK算法

这种算法让我想到了匈牙利算法(以前我看过,但今天才知道名字)
两个算法基本思路一致。所以说二分图能用网络流解决也就不必惊讶了。
所谓增广路不过是指从源点到汇点的一条可以“流水”的路径。
说是一条连接源点和汇点的路径。
意义在于表示源点到汇点也可以增加流量了,因为这又有路径可以通水。
而找到一条增广路后,显然要调整原图。
然后就被称作了残留网络。(就是修改了边)
我因为不怎么理解还搞得头晕。
当然,先前找到的增广路未必是最大流的路径(未必最优)
可能会要返回,恰似匈牙利算法的冲突时让原先重找。
所以网络流的图中还有反向边(虚边,用于操作)
表示的意义就是将过来的水还回去。
当然虚边的权值(流量限制)
是根据过来的水决定的。
因为水从源点来多少就有多少从汇点出来(前提是符合边的限制)
同理,有多少水来了,才能退多少水走。(否则出现负数了)
而且其它边(除了虚边的反向边)流来的水也不能从虚边走。
为什么?因为名字就叫虚边吗,本身就非法。
只是算法需求。通过其来反悔。

最大流再什么时候找到呢?
很好理解,在找不到增广路时,也就没法再从源点加水了。

至于时间复杂度我并没有能懂。
时间效率:\(O(nm^2)\)
匈牙利算法时间效率是:\(O(nm)\)

代码还没码。下次再更。

posted @ 2020-02-03 22:46  sjcx  阅读(74)  评论(1编辑  收藏  举报