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