让[a(1), a(2), ..., a(n-1)]是从E中选择的边序列,以通过 Kruskal 算法构造G的MST (按照它们被选择的顺序 -权重(a (i)) <= 重量(a(i + 1)) )。
现在让我们考虑一下 Kruskal 算法在输入E' = EU {e}时的表现。让i = min{i: weight(e) < weight(a(i))}。首先算法决定选择边[a(1), ..., a(i - 1)](e还没有被处理,所以它的行为是一样的)。然后它需要决定e - 如果e被删除,E' 的解决方案将与E相同。所以让我们假设算法选择的前i个边是[a(1), ..., a(i - 1), e] - 我将把这个新序列称为 a'。算法继续 - 只要其以下选择(对于 j > i)满足a'(j) = a(j - 1)我们很酷。有两种情况会打破如此大的连胜(假设在索引k + 1处出现连胜):
1) 算法选择一些不在T中的边 e' ,并且weight(e') < weight(a(k+1))。现在一个'序列是:
[a(1), ..., a(i-1), e, a(i), a(i+1), ..., a(k-1), a(k), e']
但是,如果可以将e'附加到此列表,则也可以将其附加到[a(1), ..., a(k-1), a(k)]。但是 Kruskal 的算法在为G寻找 MST 时并没有这样做。这导致矛盾。
2)礼貌选择的算法:
[a(1), ..., a(i-1), e, a(i), a(i+1), ..., a(k-1), a(k)]
但决定放弃边缘a(k+1)。但是如果e不存在于列表中,算法将决定附加a(k+1)。这意味着在图(V, {a(1), ..., a(k)}) 中,边a(k+1)将连接与边e相同的组件。这意味着在考虑G和G'的算法边a(k + 1)之后,划分为连通分量(由一组选定边确定)是相同的。因此,在处理后,a(k+1)算法在两种情况下都将以相同的方式进行。