在线性复杂度判断边是否在最小生成树内

题目:带权联通图G,其上边权重皆不相同。给定一边e,请设计一线性复杂度算法来判断e是否出现在G的最小生成树MST里。(注意:计算MST树本身复杂度已超过线性复杂度,因此本题无法承受先计算MST树)
描述算法:
1.令u和v分别为边e的两个顶点,从u开始使用DFS或BFS算法遍历所有权重不超过e的边来看能否到达顶点v。
2.如果能够到达v,那么存在一些MST不包含边e。否则每个MST包含边e。

时间复杂度:
步骤1和2的时间复杂度都是o(E),算法确定是否存在一个循环包括边e,其中没有一个边权重大于e。换句话说,算法检测e是否是一个循环的权重最大的边。
算法的正确性从下面的MST的特性可以得到
== 所有MST边的特性:一个边出现在MST中当且仅当边不是一个循环中的权值最大的边==
定理证明:
充分性
假设e不是任何一个循环的权值最大的边。令u是边e的一个顶点。令H是所有从u开始权重<e的顶点的集合。我们能够确定e是唯一的权重最小的边。所以任何一个MST必定包括e
必要性
假设e出现在所有的MST中。令C是一个包括e的循环。令m是MST,m不包括边e包括两个不相交的树,成为m1和m2.通过边e连接m1和m2,循环C存在e‘连接m1和m2.如果我们在m中用e‘来代替e,那么我们得到一个生成树不包括e,成为m‘。m‘不是一个MST。因为m和m‘的唯一区别是e和e‘,所有边e的权重一定<e‘。所有e不是C中权重最大的边。

参考文献
https://math.stackexchange.com/questions/2577365/determine-if-an-edge-appears-in-all-minimum-spanning-trees

你可能感兴趣的:(数据结构)