【总结】一般图最大匹配

二分图最大匹配:

首先我们回顾一下二分图最大匹配的算法:匈牙利算法
我们的方法是不停地寻找一条增广路,以增加我们的答案。其实带花树也是一样的思路,我们同样是寻找增广路。如果将匈牙利算法照搬到一般图上,我们会发现,算法是无法进行的。而问题出在奇环上。匈牙利算法,是基于反转操作的,每次找到一条增广路径,就将路径上所有的选择情况反转,以得到一个更大的匹配。但如果在一般图中,在增广路径走到奇环时,就会出现反转后矛盾的问题。
这里写图片描述
如上图,虚线表示未选择的边,实线表示已选择的边,如果从A出发,可以找到一条增广路径:
A->B->C->D->E->C->B->F
的确这条路径是一条交错轨,但很容易发现:如果将每条边的选择情况反转,那么边DC与边CE就会冲突,边AB与边BF也会冲突。
注:这是论文上的图,但我个人认为这个图所反映的问题是不会出现的,因为我们在匈牙利算法中会标记访问,所以不可能走环,但似乎标记访问会造成其他问题。

如果是偶环,则不会对算法的正确性有影响(毕竟二分图中都可能出现偶环)。
所以,我们所有的问题就集中在了奇环上。

带花树算法:

虽然看名字,带花树很像是某种数据结构,但它并不是数据结构,而是一种类似于匈牙利算法的图论算法。它之所以称为“树”,是因为它可以将一个图看做一颗树的形式来解决问题,这一点上它又很类似于tarjan算法。

经过刚才的讨论,问题都集中在了奇环上,所以带花树最大的目标,就是解决奇环对算法的影响。

首先,我们仍然当做是二分图来做:
仍然是暴力找增广路径,对于我们枚举到的相邻点v
若v未访问过:
1、若v已经匹配,则从v开始继续bfs
2、若v未匹配,则找到一条增广路
若v访问过,则找到一个环:
1、若为偶环,直接忽略,跳过当前节点
2、若为奇环,则将当前的环暴力缩点,将环缩成一朵陈村

以下证明摘自论文(爱看不看):
这里写图片描述
这里写图片描述
这里写图片描述
以上就是一般图

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值