美文网首页
用于不相交集合的数据结构

用于不相交集合的数据结构

作者: 琦思妙想君 | 来源:发表于2018-10-24 22:31 被阅读10次

不相交集合指的是,将一组元素划分成若干个集合,每个元素必定属于某个集合且只能属于一个集合。

不相交集合的操作

不相交集合有三个操作:
1.MAKE-SET
创建一个集合,传入一个元素 x
2.UNION
将两个集合合并成一个
3.FIND-SET
查询元素 x 所在的集合

不相交集合的一个应用是,确定无向图的连通分量

不相交集合的链表表示

用链表的方式实现不相交集合,将集合中的对象串成一个链表,简洁明了。

MAKE-SET 和 FIND-SET 两种操作都只需要 O(1) 时间。

UNION 操作由于要更新元素到集合对象的指针,效率较低,需要O(n) 的执行时间,n 为链表长度。

一种加权合并的启发式策略,执行 UNION 操作时将较短的集合合并到较长的集合。

可以证明,在这种策略下,m 个操作的序列需要 O(m+nlgn) 时间。(n 为 MAKE-SET 操作的数量,即元素的数量)

不相交集合森林

不相交集合森林,是将每个集合定义为一颗树,所有的集合组成森林。

在不相交集合森林的操作中,
MAKE-SET 简单的创建一颗只有一个结点的树。O(1)
FIND-SET 需要从结点向上寻找到根结点。O(h)
UNION 将两棵树通过,将一颗树的根结点指向另一颗树的方式,合并成一棵树。O(1)

书中给出了两种启发式策略,以改进数据结构的运行效率
1.按秩合并
每个结点维护一个秩,秩不同于链表发中的集合结点数,秩是树高度的一个上界。在 UNION 操作中,我们让较小秩的根成为较大秩根的子结点。
2.路径压缩
路径压缩是在 FIND-SET 的向上寻找的过程中,顺便将路径上的结点都变为根的子结点。一个直观的改进是,下一次对路径上结点的 FIND-SET 操作都只需要 O(1) 时间。

同时使用两种启发式策略后,m 个操作只需要 O(ma(n)) 时间。

带路径压缩的按秩合并的分析

这一节的主要内容是证明,使用了两种启发式策略后,不相交集合森林的性能。

先证明了上一节的结论中 a 函数的定义,一个增长非常慢的函数,可以认为在我们能想象到的数字中,a(n) 都小于 4

给出了一个非常复杂的势函数

最后分别证明了三种操作的摊还代价都为 O(a(n)),合并结论即得到上一节给出的结论,m 个操作只需要 O(ma(n)) 时间。

相关文章

  • 用于不相交集合的数据结构

    不相交集合指的是,将一组元素划分成若干个集合,每个元素必定属于某个集合且只能属于一个集合。 不相交集合的操作 不相...

  • LeetCode并查集(UnionFind)小结

    一,概述 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets UnionFind)的...

  • Tourist with Data Structure Thir

    探索哈希表 概念 哈希集合:哈希集合是集合数据结构的实现之一,用于存储非重复值。哈希映射 :哈希映射是映射数据结构...

  • 〔C++算法分析〕并查集

    并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使...

  • 整数集合

    整数集合 整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构, 它可以保存类型为 >int1...

  • 6.整数集合

    整数集合 1. 整数集合的实现 整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_...

  • 并查集

    什么是并查集? 并查集是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题...

  • 《算法与数据结构 C语言描述》第六章 集合与字典

    集合与字典是两种常用的数据结构,应用非常广泛字典是关联的集合。集合主要考虑集合之间的并、交和差操作,字典主要关心其...

  • 并查集

    一、定义 并查集(Union Find)是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(动态连通性问...

  • 数据结构之并查集

    并查集(Union Find)是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来...

网友评论

      本文标题:用于不相交集合的数据结构

      本文链接:https://www.haomeiwen.com/subject/ovsftqtx.html