23.2-1 对于同一个输入图,Kruskal算法返回的最小生成树可以不同。这种不同来源于对边进行排序时,对权重相同的边进行的不同处理。证明:对于图G的每棵最小生成树T,存在一种办法来对G的边进行排序,使得Kruskal算法所返回的最小生成树就是T。
直接想法就是再加一个在输入时边的顺序(即相同权重看哪条边存储的在前面就选哪条)。。。这能怎么证明><
顺便po上为了解决这个问题顺便复习和思考的内容(对,思考XD
相关
- Kruskal算法是每次选择权重最小的边加入森林,它的本质是贪心算法。
- 如果该图所有的边均不相同,那么我们可以证明最小生成树唯一
- 如果各边权值唯一,从最小生成树开始,每次加一条边i并在新生成的环上删除最大的一条边j(满足权值 ei < ej ),这时会得到一棵新的生成树,如果我们加入的那条边满足 ej - ei 最小,那么得到的就是第二小的生成树。从这个第二小的生成树开始,进行同样的操作可以得到第三小的生成树。这个迭代过程中树的权值是一直递增的,所以不可能出现相同权值的多棵最小生成树。
- 对于给定的图而言,因为最小生成树的权值和是确定的,所以最小生成树不唯一当且仅当最小生成树的形状不唯一
- 可证明最小生成树T与任意生成树T’,对边进行排序 w1 <= w2 <= … <= wn