二分匹配之匈牙利算法

二分匹配之匈牙利算法

一、概念

二分图:把点分为两个集合,在同一个集合的点之间不能有边,也就是说边只能存在于分别来自两个集合的点间,这样的图就是二分图。

 

最大二分匹配:在原二分图上通过删除一些边,来保证每个点只能与一个点相连(一一对应),能保留最多的边数,这个边数就是最大二分匹配

二、算法步骤

1)初始化,存图。

2)选定其中一个集合,依次对集合中的每个点dfs搜索增广路,成功搜到即匹配数加一,搜索的过程中也对前面的进行了更新。(最后的M图就是最大二分匹配图,搜索过程每搜索一次,M图的边数加1)。

三、具体分析

这里的增广路概念:

1、以非M图中的点出发,到非M图中的点结束。

2、所经过的边,交替是M图中的边(第一条边不属于M图,第二条属于,第三条不属于,......)

 

*M图:初始化M图为空,(所以第一次搜索产生的增广路就是一条边),每次搜索后产生的增广路与旧M图做异或操作(有相同重复的边就去掉) 就是新的M图。

四、匹配顺序

有些图不止一个最大二分匹配图,所以可能会对输出有要求。

1)邻接表存的图,所以从先建立连接的点开始读取,搜索。

2)后面的搜索会有更新,所以先建立连接的点一般不是最后的点。

处理:建立邻接表之前先排序。改变搜索增广路的顺序。

 

实例,图解后续再补......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值