在无向连通图中,如何找到一组顶点,删除哪个图形断开连接?

时间:2015-05-13 11:52:18

标签: algorithm graph graph-algorithm

我知道在undirected connected graph articulation point中删除哪个图表变为断开连接后是一个顶点。对于Java代码,我遵循了这个链接http://algs4.cs.princeton.edu/41undirected/Biconnected.java.html

现在假设我们有以上图表 - enter image description here

在上图中没有articulation points因为图形不会通过删除任何单个顶点而断开连接。但是我们可以通过删除多于1个顶点来使图形断开,例如,如果我们删除4,6个顶点图形 断开连接。

如何找到顶点集,以便在删除这些顶点之后图形变得断开连接。让我们说可以删除顶点的限制,它是3.意思是我们不能一次删除3个以上的顶点以使图形断开。

方法我在想 -

步骤1 - 运行算法以找到单个关节点。

步骤2 - 如果在步骤1之后没有关节点我们从图中移除顶点并运行清晰度点算法,我们为所有人执行此操作 图中的顶点。使用这个我们可以找到2个顶点(第一个是在运行算法之前删除的顶点,在运行算法之后找到第二个顶点),其删除会使图形断开,程序将停止,因为我们找到了一组顶点。

步骤3 - 如果我们在步骤2中找不到顶点集,我们从图中移除2个顶点并运行清晰度点算法。我们在删除后运行此算法 每对图顶点。使用它我们可以找到一组3个顶点,删除哪个图形将被断开。如果仍未断开图形,我们不再继续运行程序,因为我们可以删除的顶点限制为3。

我认为有更好的方法。

如何在删除哪个图表断开连接后找到最小顶点集。

找到一组顶点可以更好地找出哪个图形断开连接。

2 个答案:

答案 0 :(得分:3)

有关计算最小顶点切割的最佳算法,请参阅http://www.cs.colorado.edu/~hal/Papers/expandersC.ps.gz

答案 1 :(得分:2)

对于具有度数(即邻居计数)d的任何顶点,移除其邻居的所有d将断开图形(除非那些是图中唯一的其他顶点)。因此,立即为您提供需要删除的顶点数量的上限,以及您可以删除以实现该边界的实际顶点:只需查找最小度数的顶点,并删除其所有邻居。

在您的示例图中,您知道这是最佳解决方案,因为存在度数为2的顶点,并且您已经排除了大小为1的解决方案,因为您发现该图是双连的(即,不包含关节点) )。然而,一般情况下,有可能比这个上限做得更好:例如,考虑一个由k个顶点上的2个clique副本组成的图,再加上2个附加边(u1,v1)和(u2,v2),来自第一集团的u1和u2以及来自第二集团的v1和v2。这可以通过删除u1和u2(或仅仅是v1和v2)来断开连接,即使最小度数k可以任意大。