支持删除的不相交集数据结构

Posted

技术标签:

【中文标题】支持删除的不相交集数据结构【英文标题】:Disjoint set data structure supporting deletion 【发布时间】:2012-10-02 11:47:27 【问题描述】:

假设我们有一组 n 个不相交的节点 node1,node1,...,noden

以下3种操作最快的数据结构和算法是什么:

    Union(x,y):在nodex和nodey之间添加一条无向边,两个节点之间最多可以有一条边.

    IsConnected(x,y):如果 nodex 和 nodey 直接或间接连接,则返回 true,即 nodex 和 nodey 在同一个连通分量中。

    Un-union(x,y):如果节点x和节点y之间的边存在,则删除它。

不相交集对于前两个操作是一个完美的数据结构,但它不能直接支持第三个操作。有什么选择?

如果我们模拟这个过程,第一个和第三个操作可以在O(1)中实现,但第二个操作是O(n),所以我想看看是否有可能让所有三个操作都在O( logn) 时间或更短。

【问题讨论】:

【参考方案1】:

Link/cut tree 可以在 O(log N) 时间内执行这 3 个操作。

您可以在本书中阅读有关链接/切割树和相关数据结构的信息:"Handbook of Data Structures and Applications"(第 35 章)。

链接/切割树不允许在已经(间接)连接的节点之间添加边。如果您需要“Union(x,y)”操作来支持这一点,问题会变得更加复杂,您可以将其解决为无向图中的动态连通性问题。 (参见同一本书中的第 36.4 章或this pdf)。在这种情况下,插入/删除复杂度增加到 O(log2 N)。

【讨论】:

很好的参考!这个数据结构其实我听说过一次,但是我很难理解,我看看这次能不能搞定。【参考方案2】:

Kaplan, Shafrir and Tarjan 提出了一种通用技术,通过增量重建向联合查找数据结构添加删除,并显示删除需要 O(t_f(n) + t_i(n)) 分别是查找和插入节点的成本.总体思路是保持每个集合中已删除项目的数量,并在该数量达到一定阈值时重建集合。

Alstrup ,Gørtz , Rauhe, Thorup and Zwick 展示了如何通过注意树中的哪些元素占用以及哪些空置和“整理”来在恒定时间内实现删除 删除操作后的树。

【讨论】:

以上是关于支持删除的不相交集数据结构的主要内容,如果未能解决你的问题,请参考以下文章

增强几何返回相交和相交的不一致结果

数据结构——不相交集

Hyperledger 网络中的不相交通道

不相交集ADT--数组实现

ArcGis中两个面相交,怎么删除其中一个面的重叠部分呢?

数据结构与算法分析 - 9 - 并查集(不相交集)