首页 > 编程语言 >对KM算法暂时性的理解

对KM算法暂时性的理解

时间:2024-05-31 20:21:52浏览次数:26  
标签:原图 相等 个点 交错 子图 KM 算法 暂时性 delta

假设我们现在循环到了第\(i\)个点,且前面\(i-1\)个点都已经被匹配了,现在的相等子图为\(S\)

在\(A_i+\delta,B_i-\delta\)后,相等子图变成了\(S'\):

对于匹配边,其两端要么都在交错树中要么都不在交错树中,不可能出现一端在一端不在的情况,所以匹配边仍然在\(S'\)中

对于交错树上的边,显然每一条仍然在\(S'\)中

我们不妨假设前面\(i-1\)个点都是直接地找到了匹配边(也就是没有寻找增广路的过程),所以对\(S'\)重新跑一遍匈牙利,前面\(i-1\)个点选的匹配边仍然不变,第\(i\)个点的交错树一定是\(S\)中第\(i\)个点的交错树的超集

假设原图中仍然存在边\((i,j)\)满足\(i∈T,j∉T\),那么我们肯定就可以找到这么一个最小的\(\delta\)

先来验证在\(A_i+\delta,B_i-\delta\)后,对原图(注意不是\(S\)和\(S'\),是数据给出的所有边和所有点组成的原图)中的任意一条边仍然满足顶标不等式:如果这条边两端都在交错树或者都不在交错树中,那么仍然满足不等式;如果这条边的右部在交错树中但是左部不在,那么由于右部增加了一个\(\delta\)而左部没变,所以这条边仍然满足不等式;如果这条边的左部在交错树中但是右部不在,由于我们找的\(\delta\)是最小的,所以仍然满足不等式

也就是说如果我们每次都能找到这么一个\(\delta\),那么构建的新的相等子图\(S'\)一定满足顶标不等式,也就说明P430的定理可以用

那么我们在第\(i\)个点找到增广路之前,一定能够找到这么一个\(\delta\)吗?

是可以的

假设我们已经找不到这么一个\(\delta\)了但是还是没有找到增广路。我们为什么会找不到这么一个\(\delta\)?是因为原图中不存在满足\(i∈T,j∉T\)的边\((i,j)\)了。我们考虑第\(i\)个点,这就说明与其关联的边\((i,j)\)都已经被加入到相等子图中了(否则的话此时第\(i\)个点的交错树就不会包含这条边,因为这条边压根就没有被添加到相等子图中,而交错树的边肯定都是相等子图的边,也就是说原图中存在满足\(i∈T,j∉T\)的边\((i,j)\));由于此时我们还没有找到增广路,也就是说对每条与\(i\)关联的边的另一个端点\(j\)都是匹配点(否则\(i->j\)就是一条增广路),考虑每个\(j\)的匹配点\(match_j\),对每个\(match_j\)来说,与其关联的边\((match_j,k)\)也都已经被加入到相等子图中了(否则的话此时第\(i\)个点的交错树就不会包含这条边,因为这条边压根就没有被添加到相等子图中,而交错树的边肯定都是相等子图的边,也就是说原图中存在满足\(match_j∈T,k∉T\)的边\((match_j,k)\));以此类推。然后考虑最终形成的这棵交错树是什么样子的呢?实际上就是我们将原图中所有的边都添加进这个相等子图中,然后第\(i\)个点跑出的交错树(因为与交错树中的左部节点关联的边全部被加入到了相等子图中)。然而,由于原图存在完备匹配,所以如果我们将原图中所有的边都添加进这个相等子图中,第\(i\)个点根本跑不出交错树,矛盾了,所以说明我们在第\(i\)个点找到增广路之前,一定能够找到这么一个\(\delta\)

综上我们能在满足顶标不等式的前提下找到一个带权最大匹配

代码熟悉一下

标签:原图,相等,个点,交错,子图,KM,算法,暂时性,delta
From: https://www.cnblogs.com/dingxingdi/p/18225230

相关文章