现在的位置: 首页 > 综合 > 正文

匈牙利算法的概念以及最大匹配相关内容

2019年11月19日 综合 ⁄ 共 1101字 ⁄ 字号 评论关闭

  匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。

  先了解一些概念性的东西吧。

  1.二分图

  设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。一个二分图的例子:

  2.最大匹配&完美匹配

  在图论中,一个“匹配”(matching)是一个边的集合,其中任意两条边都没有公共顶点。

  最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。

  完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。

  3.交替路&增广路

  交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边...形成的路径叫交替路。

  增广路:从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路。

  注意:把增广路径上的所有第奇数条边加入到原匹配中去,并把增广路径中的所有第偶数条边从原匹配中删除(这个操作称为增广路径的取反),则新的匹配数就比原匹配数增加了1个。

  4.思想与算法

  思想:看这么一个例子,把左边1,2,3,4和右边a,b,c,d来进行匹配

  一开始我们给1分配a,1和a之间连上红线表示建立匹配。

  然后接着给2分配b,2和b连上红线表示匹配。

  紧接着给3分配,这时候发现a,b已经都有所属了,我们尝试给1重新分配,把原来的分配拆掉,用蓝线表示。

  但是很快我们发现1重新分配不了,b已经有所属,那么继续尝试给2重新分配,把原来的分配拆掉,用蓝线表示。2重新分配到c,用红线表示。

  这个时候,1可以重新分配到b,用红线表示。

  最后,3就可以分配到a,用红线表示。

  对于4,由于c已经被分配,而且尝试给其他1,2,3重新分配无法实现,就此结束。基本原则就是在原有匹配基础上重新分配,看是否可以添加一个新的匹配。

  下面,以一个相亲的例子来具体说明一下

  通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感(-_-||暂时不考虑特殊的性取向),如果一对男女互有好感,那么你就可以把这一对撮合在一起,现在让我们无视掉所有的单相思(好忧伤的感觉),你拥有的大概就是下面这样一张关系图,每一条连线都表示互有好感。

抱歉!评论已关闭.