匈牙利算法java版本

本文介绍了匈牙利算法,一种用于解决二分图最大匹配问题的算法。文章详细解释了二分图、匹配、最大匹配、完美匹配、交替路和增广路等概念,并提供了Java代码实现。通过找到并反转增广路径,可以增加匹配数,从而求得最大匹配。
摘要由CSDN通过智能技术生成

匈牙利算法java版本

介绍

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

名词解释

二分图:

二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集 U 和 V ,使得每一条边都分别连接U 、 V 中的顶点。如果存在这样的划分,则此图为一个二分图,如图1。

图1

匹配:

在图论中,一个「匹配」(matching)是一个边的集合,其中任意两条边都没有公共顶点。例如,图 2 中红色的边就是图 2 的匹配。
我们定义匹配点、匹配边、未匹配点、非匹配边,它们的含义非常显然。例如图 2 中 1、2、4、5 为匹配点,其他顶点3、4为未匹配点;1-2为匹配边,其他边为非匹配边。
图2

最大匹配:

一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。图 3 是一个最大匹配,它包含 3 条匹配边。

图3

完美匹配:

如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。图 4 是一个完美匹配。显然,完美匹配一定是最大匹配(完美匹配的任何一个点都已经匹配,添加一条新的匹配边一定会与已有的匹配边冲突)。但并非每个图都存在完美匹配。

交替路:

从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边,形成的路径叫交替路,比如图3中的 5-6 -> 6-3 -> 3-4 -> 4-1 -> 1-2 。

图4

增广路:

1.有奇数条边。
2.起点在二分图的左半边,终点在右半边。
3.路径上的点一定是一个在左半边,一个在右半边,交替出现。
4.整条路径上没有重复的点。
5.起点和终点都是目前还没有匹配的点,而其它所有点都是已经配好对的。
6.路径上的所有第奇数条边都不在原匹配中,所有第偶数条边都出现在原匹配中。
7.最后,也是最重要的一条,把增广路径上的所有第奇数条边加入到原匹配中去,并把增广路径中的所有第偶数条边从原匹配中删除,这个操作称为增广路径的取反,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值