Algorithm 反向删除算法的证明

Algorithm 反向删除算法的证明,algorithm,graph,proof,proof-of-correctness,Algorithm,Graph,Proof,Proof Of Correctness,维基百科页面(页面底部)提供的证据正确吗 伪码 1 function ReverseDelete(edges[] E) 2 sort E in decreasing order 3 Define an index i ← 0 4 while i < size(E) 5 Define edge ← E[i] 6 delete E[i] 7 if edge.v1 is not connected to edge.v2

维基百科页面(页面底部)提供的证据正确吗

伪码

 1  function ReverseDelete(edges[] E)
 2    sort E in decreasing order
 3    Define an index i ← 0
 4    while i < size(E)
 5       Define edge ← E[i]
 6         delete E[i]
 7         if edge.v1 is not connected to edge.v2
 8             E[i] ← edge
 9         i ← i + 1
 10   return edges[] E
1函数反向删除(边[]E)
2按降序排列E
3定义一个索引i← 0
4而i<尺寸(E)
5定义边缘← E[一]
6删除E[i]
7如果edge.v1未连接到edge.v2
8 E[一]← 边
9 i← i+1
10返回边缘[]E
证明由两部分组成。首先,证明了应用该算法后保留的边形成一棵生成树。其次,证明了生成树具有最小权

生成树

由于算法检查第7行中的子图,因此该算法生成的剩余子图(g)未断开连接。resualt子图不能包含循环,因为如果它包含循环,则在沿边移动时,我们将遇到循环中的最大边,并删除该边。因此,g必须是主图g的生成树

最低限度

我们通过归纳证明了以下命题p是正确的:如果F是保持在while循环末尾的边集,那么存在一些最小生成树(它的边)是F的子集

显然,p在while循环开始之前保持不变。由于加权连通图总是有一个最小生成树,且F包含图的所有边,因此该最小生成树必须是F的子集

现在假设p对于一些非最终边集F为真,并假设T是包含在F中的最小生成树。我们必须证明,在算法中删除边e之后,存在一些(可能其他)生成树T',它是F的子集

如果下一条删除的边e不属于t,则t=t'是F的子集,p保持

否则,如果e属于T:首先请注意,该算法只删除不会导致F中不连通的边。因此,e不会导致断开连接。但是删除e会导致树T中的断开连接(因为它是T的一个成员)。假设e将T分成子图t1和t2。由于删除e后整个图是连通的,因此t1和t2之间必须存在路径(e除外),因此F中必须存在循环C(删除e之前)。现在我们必须在这个循环中有另一条边(称为f),它不在T中,但在f中(因为如果所有循环边都在树T中,那么它就不再是树了)。我们现在宣称T'=T-e+f是最小生成树,它是f的子集

首先证明了T'是一棵生成树。我们知道,通过删除树中的一条边并添加另一条不会导致循环的边,我们可以得到另一棵具有相同顶点的树。因为T是一棵生成树,所以T'也一定是一棵生成树。因为添加“f”不会导致任何循环,因为“e”被删除。(请注意,树T包含图形的所有顶点)

其次证明了T'是最小生成树。边“e”和“f”有三种情况。wt是权重函数

wt(f) wt(f)>wt(e)这也是不可能的。从那时起,当我们以边权重的降序通过边时,我们必须先看到“f”。因为我们有一个循环C,所以删除“f”不会导致f中的任何断开。所以算法会在更早的时候从f中删除它。所以“f”不存在于f中,这是不可能的(我们已经在步骤4中证明了f的存在)

所以wt(f)=wt(e)sot'也是最小生成树,所以p也成立。 当while循环完成时(也就是我们看到所有边的时候),P保持不变,我们证明了在最后F变成了一棵生成树,我们知道F有一棵最小生成树作为它的子集,所以F必须是最小生成树本身

编辑


事实上,我对“首先我们证明T'是一棵生成树”一段和该部分有问题“我们在最后证明了F变成了一棵生成树,我们知道F有一棵最小生成树作为它的子集。所以F必须是最小生成树本身

是否有任何特定的部分你不理解或不认为是真的?事实上,我对“首先我们证明t'是一棵生成树”一段和“我们在最后证明了F是一棵生成树,我们知道F有一棵最小生成树作为它的子集。所以F本身必须是最小生成树。”任何人都需要做大量的工作来解释为什么这个证明可能是真的,也可能不是真的。你应该非常清楚具体地说明你的问题是什么。