并查集

作者: iOS小洁 | 来源:发表于2023-02-06 21:57 被阅读0次

并查集

并查集,又叫不相交集合。可以用数组实现的树状结构

查找:查找元素所在的集合

合并:将两个元素所在的集合合并为一个集合

Quick Find 实现,同一个集合的所有元素指向一个节点。查找时间复杂度O(1),合并时间复杂度O(n)

Quick Union实现,树的形式保存,查找的时候需要查到根结点,查找时间复杂度O(logn),合并的时间复杂度O(logn)

接口定义

    /**
     * 查找v所属的集合(根节点)
     * @param v
     * @return
     */
    public abstract int find(int v);

    /**
     * 合并v1、v2所在的集合
     */
    public abstract void union(int v1, int v2);

    /**
     * 检查v1、v2是否属于同一个集合
     */
    public boolean isSame(int v1, int v2) {
        return find(v1) == find(v2);
    }

优化

在quick union中,讲一个树接到另一个树的时候,可能会出现极度不平衡,甚至退化成链表

优化方案:

  1. 基于size,元素少的树,嫁接到元素多的树
  2. 基于rank 树高度,矮的树嫁接到高的树

基于size也会出现不平衡,整体效果比基于rank差

基于rank的优化,可以对树进行继续优化:

  1. 路径压缩:在find的时候将所有结点都指向根结点,从而降低树高度
  2. 路径分裂:使路径上的每个结点都指向其祖父结点
  3. 路径减半:使路径上的每隔一个结点都指向其祖父结点

自定义类型

并查集是基于整型数据,其他类型使用并查集方案

1、通过一些方法将自定义类型转为整型后使用

2、使用链表+映射

相关文章

  • markdown学习

    #并查集 ##并查集的定义 ##并查集的操作

  • 算法模板(四)并查集

    并查集 路径压缩并查集

  • 并查集入门使用

    本文参考自《算法笔记》并查集篇 并查集的定义 什么是并查集?并查集可以理解为是一种维护数据集合的结构。名字中并查集...

  • 并查集练习

    并查集 参考《算法笔记》 三要素:并,查,集。 并差集与一个算法有关,kruskal算法,就可通过并查集实现。 1...

  • 并查集

    并查集 并查集是什么 并查集是一种用来管理元素分组情况的数据结构,并查集可以高效地进行如下操作: 查询元素a和元素...

  • 数据结构与算法(十二)并查集(Union Find)

    本文主要包括以下内容: 并查集的概念 并查集的操作 并查集的实现和优化Quick FindQuick Union基...

  • 并查集

    并查集是什么 并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以...

  • 并查集

    开始时让每个元素构成一个个单元素集合(注意初始化时应使每个元素各成一组)按照一定顺序将属于同一组元素所在的集合合并...

  • 并查集

  • 并查集

    并查集 https://blog.csdn.net/liujian20150808/article/details...

网友评论

    本文标题:并查集

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