这个最小生成树算法是否正确?

时间:2008-09-01 05:10:09

标签: algorithm correctness

最小生成树问题是采用连接加权图并找到具有最低总权重的边缘子集,同时保持图形连接(并因此产生非循环图)。

我正在考虑的算法是:

  • 查找所有周期。
  • 从每个周期中移除最大边缘。

此版本的推动力是一种仅限于“规则满意度”而没有任何迭代结构的环境。它也可能适用于疯狂并行的硬件(即一个系统,你希望它具有几倍的并行度,然后循环)。

编辑:

以上是以无状态方式完成的(选择/保留/忽略任何周期中不是最大边缘的所有边缘,其他所有边缘都被移除)。

7 个答案:

答案 0 :(得分:1)

如果两个周期重叠会发生什么?哪一个最长的边缘首先被删除?如果两个循环之间的最长边是否共享是否重要?

例如:

V = { a, b, c, d }
E = { (a,b,1), (b,c,2), (c,a,4), (b,d,9), (d,a,3) }

有一个 - > b - > c - >一个循环,一个a - > b - > d - >一个

答案 1 :(得分:1)

您的算法定义不明确。如果你有一个完整的图表,你的算法似乎需要在第一步中除去除了两个最小元素之外的所有元素。此外,在图表中列出所有周期可能需要指数时间。

精化:

在一个有n个节点和每对节点之间的边的图中,如果我的数学是正确的,那么,如果你计算一个周期,就有n!/(2k(nk)!)个大小为k的周期作为k个节点和k个边缘的一些子图,每个节点的度数为2。

答案 2 :(得分:1)

@ shrughes.blogspot.com:

我不知道删除除了两个以外的所有内容 - 我已经草拟了算法的各种运行并假设并行运行可能会多次删除边缘我无法找到我没有离开的情况生成树。不管它是否是最小的,我都不知道。

答案 3 :(得分:1)

为了实现这一目标,您必须详细说明如何查找所有周期,显然没有任何迭代结构,因为这是一项非常重要的任务。我不确定这是可能的。如果您确实想要找到不使用迭代结构的MST算法,请查看Prim'sKruskal's算法,看看是否可以修改它们以满足您的需求。

此外,这种理论架构中的递归是否被禁止?如果是这样,实际上可能无法在图形上找到MST,因为您无法检查图形上的每个顶点/边缘。

答案 4 :(得分:1)

我不知道它是否有效,但无论你的算法甚至不值得实施。找到所有周期将成为杀死它的巨大瓶颈。在没有迭代的情况下这样做是不可能的。为什么不实现一些标准算法,比方说Prim's

答案 5 :(得分:0)

@Tynan系统可以描述(略微简化)作为描述分类的规则系统。 “如果它们在B中但不在C中,则属于A类”,“连接到Z中节点的节点也在Z”中,“M中的每个类别都连接到节点N并且具有'子'类别,也在M为连接到N“的每个节点。它比这稍微复杂一点。 (我已经证明,通过创建不稳定的规则,您可以对转弯机进行建模,但这不是重点。)它不能显式定义迭代或递归,但可以使用第2和第3等规则对递归数据进行操作。

@Marcin,假设有无限数量的处理器。显示程序可以在O(n ^ 2)中运行,因为n是最长的循环,这是微不足道的。有了更好的数据结构,这可以减少到O(n * O(设置查找功能)),我可以设想能够在恒定时间内评估所有周期的硬件(量子计算机?)。给出MST问题的O(1)解决方案。

Reverse-delete algorithm似乎提供了正确性的部分证明(所提出的算法不会产生非最小生成树)这是通过争论mt算法将删除反向删除算法的每个边缘得出的。将。但是我不知道如何证明我的算法不会删除比该算法更多的算法。

... HHMM

答案 6 :(得分:0)

好的,这是尝试完成正确性的证明。通过类比反向删除算法,我们知道将删除足够的边。剩下的就是表明不会删除许多边缘。

删除到许多边可以描述为删除图节点的二进制分区一侧之间的所有边。然而,只有循环中的边缘被移除,因此,对于要移除的分区之间的所有边缘,需要有返回路径来完成循环。如果我们只考虑分区之间的边缘,那么算法最多可以移除每对边缘中较大的边缘,这永远不会移除最小的桥接边缘。因此,对于任意二进制分区,算法都不能切断侧面之间的所有链接。

剩下的是显示这扩展到> 2路分区。