证明找到具有矛盾的生成树的新算法的最优性

时间:2014-11-25 09:15:59

标签: algorithm graph graph-theory discrete-mathematics minimum-spanning-tree

下面是一个查找生成树的算法:

STNew(G, w)
   Z ← empty array
   for each edge e in E, taken in random order do
       Z ← Z ∪ e
       if Z has a cycle c then
           let e' be a maximum-weight edge on c
           Z ← Z − e'
   return (Z)

此算法是否始终返回生成树?


我会说是的。它有点像伪装的Kruskals算法 - 排序。

我试图用矛盾来证明这一点。见下文。

假设Z不是生成树。这意味着图中存在循环或断开连接。由于算法的第4行,不能有循环。

但是现在,我怎样才能证明没有断线?

作为图论的新手,我真的没有其他想法。有人会有任何想法或建议吗?

1 个答案:

答案 0 :(得分:1)

是的,算法总是找到生成树(如果存在,即图表有源)。不确定它是否找到了 minimal 生成树。您已经证明结果图中没有循环,因此我们只需要显示连接性。

证明结果图已连接:

假设它不是,并且(至少)有2个连接的组件U1,U2。
原始图表已连接,因此有一些边缘连接U1U2,让它为e。检查选择e并添加到Z的点。
现在,由于U1U2未连接,因此有一点e被删除(否则它们已连接)。让我们迭代一些边e'。涉及的周期包含e(因为它被删除),因此它包含来自u1的节点U1和来自u2的节点U2,以便e=(u1,u2)。 W.L.O,让周期为u1-v1-v2-...-vk-u2-u1。但请注意,删除e后,仍有一条路径u1-v1-v2-...-vk-u2连接U1U2,因此组件仍然连接在一起。对于将来的任何迭代,这都是正确的,这意味着组件U1U2在结果图中连接。
矛盾。

QED