“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流

本人大四即将结束,于2018年12月18日购《算法导论》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接。

放在开头:没有好的算法,坏的算法之说,重点是针对不同的情况,针对不同的数据,针对不同的需求,去选择算法,改良算法。我的数学功底不强,太难的公式我看不懂,太高深的思想我理解不了,我主要以应用为主,不以解释数学公式为主。

这是一个很有意思的问题。回忆一下基尔霍夫定律,对于一个结点来说,流入的电流等于流出的。“最大流”问题跟这个基尔霍夫定律差不多,我们将有向图看成是一个“流网络”。每一个边都有最大的容量限制,流量只能在0,和最大容量限制之间设定。我们的目的,是控制每个边的实际流量(注意,不能超过每个边的容量限制),使得流入汇聚点的流量最大。

下面这个就是一张流网络图,s表示开始点,t表示汇聚点。

“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流_第1张图片

斜杠的左边表示实际流量,右边表示最大的容量限制。

对于此图而言,我们的目的就是使流入t的实际流量最大。

Ford-Fulkerson方法

这个是一种解决最大流问题的常用方法,而不是算法,介绍这个方法之前,先说三个重要的思想。

1、残存网络与反向边(该方法的灵魂之处)

不添加反向边,就没有机会再次调整流网络的机会,正是因为正向流增加的同时给此边的逆向边减去相同的流量,才能给予回流的机会。

“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流_第2张图片

“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流_第3张图片

2、增广路径

下图中的阴影路径就是一条增广路径,增广路径中,最大能取4作为流量值。

再下面这个图就是将4作为流量值的残存网络图。

“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流_第4张图片

“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流_第5张图片

3、流网络的切割

这个最大流最小切割定理告诉我们,一个流最大流当且仅当其残存网络不包含任何增广网络。

Edmonds-Karp算法

是上面这个Ford-Fulkerson方法的一种典型实现。寻找增广网络的方法是广度优先搜索方法,我们在残存网络中选择的增广路径是一条从源结点s到汇点t的最短路径,其中每条边的权重为单位距离。

最大二分匹配

给定一个无向图G=(V,E),一个匹配是边的一个子集E,使得对于所有结点v∈V,子集M中最多有一条边与结点v相连。如果子集M中的某条边与结点v相连,则称结点v由M所匹配。否则,结点υ就是没有匹配的。最大匹配是最大基数的匹配,也就是说,对于任意匹配M′,有|M|≥|M′的匹配M。

我们要使匹配数量达到最大。

“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流_第6张图片“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流_第7张图片

我们在这里将最大二分匹配问题,转换到了最大流问题,我们如果得到了最大流,就得到了最大匹配数量。

你可能感兴趣的:(算法导论)