使用Kruskal算法找到图表中的最小切割?

时间:2012-07-06 19:35:48

标签: algorithm math minimum-spanning-tree minimum-cut kruskals-algorithm

  

我们已经看到跨越树木和削减密切相关。这是另一种联系。让我们删除Kruskal算法添加到生成树的最后一个边缘;这会将树分成两个部分,从而在图中定义一个切口(S,S)。我们怎么说这个减产?假设我们正在使用的图是未加权的,并且其边缘是随机均匀排序的,以便Kruskal算法处理它们。这是一个值得注意的事实:概率至少为1 / n ^ 2,(S,S)是图中的最小切割,其中切割的大小(S,S)是在S和S之间交叉的边数。这意味着重复过程O(n ^ 2)次并输出最小的切割得到G的最小切割概率很高:O(mn ^ 2 log n)算法用于未加权的最小切割。一些进一步的调整给出了由David Karger发明的O(n ^ 2 log n)最小割算法,这是对这个重要问题最快的已知算法。

  • 这是否取决于通过Kruskal算法处理图形的n ^ 2种独特方法的事实?我的意思是如果只有 3种Kruskal算法处理具有10个节点的图的独特方式,重复该过程n ^ 2次将不会产生n ^ 2个唯一的“最后边缘”。如果只有少于n ^ 2个唯一的最终切割(小于n ^ 2个唯一的“最后边缘”),它会如何工作?

  • 如果总共少于n ^ 2条边怎么办?例如,您可以拥有10个节点的连接图,只有9个边,这意味着无论您重复算法多少次,您都不会有n ^ 2个唯一的“最后边”。在这种情况下它会如何运作?

  • 只是循环遍历每个边缘并检查边缘是否是最小切割是不是更容易?在n个节点的图中,唯一边的最大数量是n + n-1 + n-2 ... + 1个边,小于n ^ 2。并且考虑到n ^ 2小于n ^ 2 log n,为什么不绕过所有边缘,因为这更快?

1 个答案:

答案 0 :(得分:4)

我认为你可能会误解算法是如何工作的。该算法通过运行Kruskal的算法来工作,直到最后一个边缘被添加,然后在此之前停止。该算法不会尝试建立这些“最后边缘”的集合;相反,重复运行O(n 2 )Kruskal算法的随机迭代,以便建立O(n 2 )可能的切割。在所有这些候选切割中采用最低切割然后给出最小切割的概率很高。换句话说,如果少于O(n 2 )边缘则无关紧要。重要的是最后留下的切口,而不是考虑的最后边缘。

希望这有帮助!