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

Java 支持删除的不相交集数据结构,java,c++,algorithm,data-structures,Java,C++,Algorithm,Data Structures,假设我们有一组n个不相交的节点{node1,node1,…,noden} 以下3种操作的最快数据结构和算法是什么: 并集(x,y):在nodex和nodey之间添加一条非定向边,两个节点之间最多只能有一条边 IsConnected(x,y):如果nodex和nodey直接或间接连接,即nodex和nodey位于同一连接组件中,则返回true 联合(x,y):删除nodex和nodey之间的边(如果存在) 不相交集是前两种操作的完美数据结构,但它不能直接支持第三种操作。替代方案是什么 如果我们模拟

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

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

  • 并集(x,y):在nodex和nodey之间添加一条非定向边,两个节点之间最多只能有一条边

  • IsConnected(x,y):如果nodex和nodey直接或间接连接,即nodex和nodey位于同一连接组件中,则返回true

  • 联合(x,y):删除nodex和nodey之间的边(如果存在)

  • 不相交集是前两种操作的完美数据结构,但它不能直接支持第三种操作。替代方案是什么

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

    可以在O(logn)时间内执行这三个操作

    您可以在本书(第35章)中阅读有关链接/切割树和相关数据结构的内容

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

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

    通过记录树中哪些元素被占用,哪些元素空闲,以及“整理”,演示如何在固定时间内实现删除
    删除操作后的树。

    非常好的参考!实际上,我听过一次这个数据结构,但它对我来说很难理解,我会看看这次我是否能得到它。