9

假设我们有一组 n 个不相交的节点 {node 1 ,node 1 ,...,node n }

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

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

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

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

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

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

4

2 回答 2

10

链接/切割树可以在 O(log N) 时间内执行这 3 个操作。

您可以在本书中阅读有关链接/切割树和相关数据结构的信息:“数据结构和应用程序手册”(第 35 章)。

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

于 2012-10-02T12:02:02.500 回答
7

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

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

于 2012-10-02T12:26:03.050 回答