拆解图算法

Graph Algorithm for Dismantling

一个图表没有绿色和我的边缘。图表开始连接,然后沿着它们在列表中出现的顺序重新排列。在过程结束时,图表被打断。

因此,在列表的边缘上有一个特殊的边缘,在清除之前,有一个部分与N/4绿色的浮标更多的连接。沿着这一边缘,图表中没有与N/4绿色地板更接近的成分。

我该怎么做才能找到这个边缘我只是开始清除边缘,然后每一次穿过图表,看是否有足够的大连接部件?那是在O(NM)时间里运行的,但我感觉一定有一些快捷的方式。我认为,答案有待于用分开的组件找到连接部件,但我不确定如何才能实现这一点。


考虑反向运行此过程,添加边而不是删除边。这个过程与Kruskal的算法有着很强的相似性(每个节点都是从自身开始的,并且边缘被添加到连接不同的组件中),除了当至少有一个连接组件具有至少⌊n/4⌋节点时,您会立即停止。

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