Algorithm 拆卸的图算法

Algorithm 拆卸的图算法,algorithm,graph,graph-algorithm,Algorithm,Graph,Graph Algorithm,图有n个顶点和m条边。图形开始连接,然后按边在列表中的显示顺序删除边。在流程结束时,图形断开连接 因此,边列表中有一条特定的边,因此在删除该边之前,有一个连接的构件具有超过n/4个顶点的楼板。删除此边后,图中没有连接的组件,其顶点数超过n/4个 我将如何着手设计最佳算法来找到这一优势。我是否只是开始删除边,然后每次遍历图形以检查最大的连接组件是否足够?这运行在O(纳米)的时间,但我觉得必须有一些更快的方式。我认为答案与使用不相交的集合来查找连接的组件有关,但我不确定如何实现这一点。考虑反向运行此

图有n个顶点和m条边。图形开始连接,然后按边在列表中的显示顺序删除边。在流程结束时,图形断开连接

因此,边列表中有一条特定的边,因此在删除该边之前,有一个连接的构件具有超过n/4个顶点的楼板。删除此边后,图中没有连接的组件,其顶点数超过n/4个


我将如何着手设计最佳算法来找到这一优势。我是否只是开始删除边,然后每次遍历图形以检查最大的连接组件是否足够?这运行在O(纳米)的时间,但我觉得必须有一些更快的方式。我认为答案与使用不相交的集合来查找连接的组件有关,但我不确定如何实现这一点。

考虑反向运行此过程,添加边而不是删除边。这个过程与Kruskal的算法非常相似(每个节点都是从自身开始的,并且在链接中添加了边,将不同的连接组件连接起来),只是当至少有一个连接组件与至少一个节点连接时,就会停止⌊n/4⌋ 其中的节点

解决这个问题的一种方法是使用Kruskal算法的修改版本和增强的union find数据结构,以便union find结构中的每个代表在其连接的组件中存储节点数。按相反顺序遍历边,如果端点已连接,则在每个点处丢弃边,否则将链接它们。如果您添加的边导致存在至少⌊n/4⌋ 节点,您已经找到了要查找的边。如果您使用unionfind数据结构的快速实现,它将在时间O(n+mα(n))内运行,这实际上是线性的