正规的算法解释真看不懂。。。。
果然二分图这东西还是得和泡妞有关才好理解。。。 _ (:зゝ∠) _
推荐http://www.cnblogs.com/wenruo/p/5264235.html
正题
KM算法是用于解决带权二分图的完美匹配的最大匹配值。(你不懂完美匹配,恭喜恭喜),是基于匈牙利算法的。
我惊讶的发现,空说点实在是不好理解(我智商低←_←),所以,下面把问题改成最令人感兴趣的泡妞问题。。。。
一个点集为男生,一个点集为女生,每一个女生对每一个男生有一个好感度(即边权),问如何配对使得最终好感度的和最大。
ex[i][j]表示第i个妹子对第j个男生的好感度。
思路
首先这东西为完美匹配,我们先把女生对男生没有好感度的(真可怜)视为好感度为0,那么匹配后自然就是一个完美匹配了!
接下来的问题就是最大匹配值。
每个妹子都期望有个好归宿,所以她们期望能够和自己好感度最高的男生牵手。
对此,我们引入数组exg[i]表示第i个妹子的期望,初始时exg[i]=max(ex[i][j])(即妹子对所有男生中,好感度最高的男生)。
由于现在社会状况为男女比例严重失调,所以男生已经不在乎妹子颜值了,只希望能有一个妹子就好,所以exb[i]表示第i个男生的期望,初始为exb[i]=0;
匹配前规定
开始匹配时,每一轮匹配中,每一个男生与女生只能尝试匹配一次!要求为ex[i][j]=exg[i]+exb[j](即双方都要满意对方)
匹配中
第一轮中,女1与男3匹配,成功。
女2与男3匹配,然而男3已经匹配过了,不能匹配,其他男生又不符合要求,这一轮匹配宣告失败。
匹配后
匹配失败后,参与匹配的有女1,女2,男3。
女生中有争执,只好降低自己的期望,女1要想可以匹配其他男生,至少要降低1点期望,女2也同理,所以她们的期望-1,即exg[1]-1,exg[2]-1.
而男3由于得到了妹子的关注,终生大事已经要着落了,自然就开始关注其妹子的颜值了,他的期望就上升1点,即exb[3]+1。
可以发现
1.只有参与匹配的男女才会进行调整。
2.男生上升的期望与女生下降的期望的值是相同的。
然后重复匹配,失败再进行调整,直到成功。
时间复杂度为