1.KM只能在满足最大匹配一定是完备匹配时,才能正确求解
2.交错树:匈牙利算法中,如果从某个左部出发寻找匹配失败,那么在dfs过程中,所有访问过的节点,以及为了访问这些节点而经过的边,共同构成一棵树
3.顶标:给第i个左部节点一个整数值ai,给第j个右部节点一个整数值bj。必须满足ai+bj>=w(i,j)
其中w(i,j)表示第i个左部点和第j个右部的边权
定理1:若相等子图存在完备匹配,则这个匹配就是最大匹配
km算法思想:在满足ai+bj>=w(i,j),给每个节点随意赋值,不断扩大相等子图规模,直至存在完备匹配
假如我们把交错树T中左部节点-Δ,右部节点+Δ
找出最小的ai+bj-w(i,j)作为Δ
那就能保证有一条新的边加入相等子图
不断重复以上过程,知道匹配成功,就有带权最大匹配
优化:每次dfs失败后,相等子图得到了扩展,但下一次dfs如果还从交错树的根开始,就会产生很多重复的遍历,
时间复杂度就炸了。如果从相等子图刚刚加入的边(也就是那条delta最小的边)出发,继续搜索,
就可以保证相等子图在整个扩展的过程中,全图累计只遍历一次,时间复杂度就会很优秀。