给定无向连通图G = {V,E},V(G)中的顶点,标记为v,权重函数f:E-> R +(正实数),我需要找到一个MST使得v的程度很小。我已经注意到,如果所有边缘都具有独特的重量,那么MST是独一无二的,所以我认为它与边缘上的重复权重有关。我虽然关于运行Kruskal的算法,但是在对边缘进行排序时,我总是会考虑在v last上出现的边缘。例如,如果(a,b),(c,d),(v,e)是权重k的唯一边,那么排序边数组中这些边的可能排列是:{(a,b), (c,d),(v,e)}或{(c,d),(a,b),(v,e)}。我在几张图表中运行了这种变化,它似乎有效,但我无法证明这一点。有谁知道如何证明算法是正确的(意义证明v的程度是最小的),或者给出一个相反的算法失败的例子?
答案 0 :(得分:1)
首先请注意,Kruskal的算法可以应用于任何加权图,无论它是否连接。通常,它会产生最小权重跨越林(MSF),每个连接组件有一个MST。为了证明您对Kruskal算法的修改成功找到v
具有最小程度的MST,有助于证明稍微强一些的结果,即如果将算法应用于可能断开连接的图形,那么它会成功找到最小化v
度的MSF。
证据是通过对不同权重的数字k
进行归纳。
基础案例(k = 1
)。在这种情况下,可以忽略权重,我们正在尝试查找v
度最小化的生成林。在这种情况下,您的算法可以描述如下:根据以下两个规则尽可能长地选择边缘:
1)没有选定边形成具有先前选定边的循环
2)除非任何边缘没有选择,否则不会选择涉及
v
的边缘 涉及v
违反规则1.
让G'
表示从v
移除G
和所有事件边缘的图表。很容易看出,这种特殊情况下的算法的工作原理如下。首先为G'
创建生成林。然后,它会将原始图v's
中G
连接组件中包含的林中的树包含在内,并通过单个边将每个组件连接到v
。由于在第二阶段连接到v
的组件可以以其他方式相互连接(因为如果存在任何不涉及v
的连接边缘,它将被规则2选中)这很容易看v
的程度是最小的。
归纳案例:假设k
的结果为真,而G
是k+1
不同权重的加权图,v
是{{1}中的指定顶点}}。按递增顺序对不同的权重进行排序(以便权重G
是不同权重中最长的权重 - 例如k+1
)。设w_{k+1}
为G'
的子图,其顶点集相同但权重G
的所有边都已删除。由于边缘按重量增加的顺序排序,请注意修改后的Kruskal算法启动,方法是将自身应用于w_{k+1}
。因此 - 通过在考虑权重G'
的边缘之前的归纳假设,该算法成功地构建了w_{k+1}
的{{1}},其F'
度{ G'
中的{1}}被最小化。
作为最后一步,应用于整体图d'
的修改后的Kruskal将通过添加权重v
的边缘将G'
中的某些树合并在一起。概念化最后一步的一种方法是将G
视为一个图,其中当第一棵树中的某个节点到第二棵树中的某个节点存在权重F'
的边缘时,两棵树正好相连。树。我们(几乎)有w_{k+1}
的基础案例。修改后的Kruskal将添加重量F'
的边缘,直到它不再这样做 - 并且不会添加连接到w_{k+1}
的边缘,除非没有其他方法连接到需要连接的F'
中的树,以获取原始图w_{k+1}
的生成林。
结果MSF中v
的最终度数为F'
,其中G
是在最后一步添加的权重v
的边数。 d = d'+d"
和d"
都不能做得更小,因此w_{k+1}
不能做得更小(因为任何跨越森林中d'
的程度都是如此可以写为权重小于d"
进入d
的边数和加权v
进入w_{k+1}
的边数的总和。)< / p>
QED。
在这方面还有一个挥手的元素,特别是在最后一步 - 但Stack Overflow不是同行评审期刊。无论如何,整体逻辑应该足够清楚。
最后一句话 - 似乎相当清楚Prim的算法可以针对这个问题进行类似的修改。你看过那个吗?