设为首页 加入收藏

TOP

KM算法最好的讲解+POJ2195[KM算法+最小费用流]
2014-11-24 08:24:40 来源: 作者: 【 】 浏览:0
Tags:算法 最好 讲解 POJ2195 最小 费用

二分图匹配算法总结


二分图最大匹配的匈牙利算法


二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。


最大匹配:图中包含边数最多的匹配称为图的最大匹配。


完美匹配:如果所有点都在匹配边上,称这个最大匹配是完美匹配。


最小覆盖: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数


最小路径覆盖:


用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i',如果有边i->j,则在二分图中引入边i->j',设二分图最大匹配为m,则结果就是n-m。


最大独立集问题:


在N个点的图G中选出m个点,使这m个点两两之间没有边.求m最大值.


如果图G满足二分图条件,则可以用二分图匹配来做.最大独立集点数 = N - 最大匹配数


一、匈牙利算法


设G=(V,{R})是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二分图。


v 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。


v 选择这样的边数最大的子集称为图的最大匹配问题(maximal matching problem)


v 如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。


最大匹配在实际中有广泛的用处,求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法的复杂度为边数的指数级函数。因此,需要寻求一种更加高效的算法。


匈牙利算法是求解最大匹配的有效算法,该算法用到了增广路的定义(也称增广轨或交错轨):若P是图G中一条连通两个未匹配顶点的路径,并且属M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。


由增广路径的定义可以推出下述三个结论:


v 1. P的路径长度必定为奇数,第一条边和最后一条边都不属于M。


v 2. P经过取反操作(即非M中的边变为M中的边,原来M中的边去掉)可以得到一个更大的匹配M’。


v 3. M为G的最大匹配当且仅当不存在相对于M的增广路径。


从而可以得到求解最大匹配的匈牙利算法:


v (1)置M为空


v (2)找出一条增广路径P,通过取反操作获得更大的匹配M’代替M


v (3)重复(2)操作直到找不出增广路径为止


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++函数参数小结 下一篇Python嵌入到C++时发布的流程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)