二分图匹配基于匈牙利算法和KM算法.doc





《二分图匹配基于匈牙利算法和KM算法.doc》由会员分享,可在线阅读,更多相关《二分图匹配基于匈牙利算法和KM算法.doc(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二分图匹配-基于匈牙利算法和 KM 算法2007-09-19 16:54设 G=(V,R)是一个无向图。如顶点集 V 可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图 G 为二分图。v给定一个二分图 G,在 G 的一个子图 M 中,M 的边集E中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。v选择这样的边数最大的子集称为图的最大匹配问题最大匹配问题(maximal matchingproblem)v如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配完全匹配,也称作完备匹配。完备匹配。最大匹配在实际中有广泛的用处,求最大匹配的一
2、种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法的复杂度为边数的指数级函数。因此,需要寻求一种更加高效的算法。匈牙利算法是求解最大匹配的有效算法,该算法用到了增广路的定义(也称增广轨或交错轨):若 P 是图 G 中一条连通两个未匹配顶点的路径,并且属 M 的边和不属 M 的边(即已匹配和待匹配的边)在 P 上交替出现,则称 P 为相对于 M的一条增广路径。由增广路径的定义可以推出下述三个结论:v1.P 的路径长度必定为奇数,第一条边和最后一条边都不属于 M。v2.P 经过取反操作(即非 M 中的边变为 M 中的边,原来 M 中的边去掉)可以得到一个更大的匹配 M。v3.M
3、 为 G 的最大匹配当且仅当不存在相对于 M 的增广路径。从而可以得到求解最大匹配的匈牙利算法:v(1)置 M 为空v(2)找出一条增广路径 P,通过取反操作获得更大的匹配 M代替 Mv(3)重复(2)操作直到找不出增广路径为止根据该算法,我选用 dfs(深度优先搜索)实现。程序清单如下:程序清单如下:int matchi/存储集合 m 中的节点 i 在集合 n 中的匹配节点,初值为-1。int n,m,match100;/二分图的两个集合分别含有 n 和 m 个元素。bool visit100,map100100;/map 存储邻接矩阵。bool dfs(int k)int t;for(in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二分 匹配 基于 匈牙利 算法 KM

限制150内