计算机基础--->数据结构(9)【并查集】

这篇具有很好参考价值的文章主要介绍了计算机基础--->数据结构(9)【并查集】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

并查集的概述

并查集是一种用于解决集合合并和查询问题的数据结构,主要用于实现有关集合的操作,它有两种主要操作,合并(union)和查找(find)。

  1. 查找(Find):用来确定元素属于哪个集合。它接受一个元素作为参数,并返回这个元素所属集合的代表元素。通过查找操作,可以判断两个元素是否属于同一个集合。
  2. 合并(Union):用于将两个集合合并成一个集合。它接受两个元素作为参数,并将这两个元素所属的集合进行合并。合并操作可以将两个不相交的集合合并成一个集合。

并查集由一组集合构成,其中每个集合标识了一个由元素组成的不相交的子集。每个集合有一个代表元素,通常是集合中的某个元素,代表元素可以用来唯一标识一个集合。

并查集的主要用途

  1. 可以判断两个元素是否属于同一集合:可以解决连接性问题,比如判断网络中两个节点之间是否存在连通路径
  2. 判断图中是否有环存在:逐条遍历图中的边,不断执行合并操作,如果尝试合并两个已经在同一个集合中的元素,则说明存在环路
  3. 求连通分量
  4. 图的最小生成树算法
  5. 动态等价关系:判断社交网络中两个人是否是朋友关系

并查集的实现

创建和初始化集合

计算机基础--->数据结构(9)【并查集】,计算机基础,# 数据结构,数据结构,并查集

    private int[] ids;// 集合

    public UnionFind1(int[] arr) {
        int length = arr.length;
        ids = new int[length];
        for (int i = 0; i < length; i++) {
            ids[i] = i;
        }
    }

查找当前元素的集合根节点

    public int findParent(int index) {
        // 递归终止条件
        if (index == this.parent[index]) {
            return this.parent[index];
        }
        return findParent(parent[index]);
    }

判断两个元素是否处于同一集合

    public boolean isConnected(int p, int q) {
        return findParent(p) == findParent(q);
    }

合并两个集合

计算机基础--->数据结构(9)【并查集】,计算机基础,# 数据结构,数据结构,并查集

将节点少的树合并到节点多的树

    public void union(int p, int q) {
        int pFather = findParent(p);
        int qFather = findParent(q);
        if (pFather != qFather) {
            if (sz[pFather] > sz[qFather]) {
                this.parent[qFather] = pFather;
                sz[pFather] = sz[qFather];
            } else {
                this.parent[pFather] = qFather;
                sz[qFather] = sz[pFather];
            }
        }
    }

将高度小的树合并到高度大的树

    public void union(int p, int q) {
        int pFather = findParent(p);
        int qFather = findParent(q);
        if (pFather != qFather) {
            if (rank[pFather] > rank[qFather]) {
                this.parent[qFather] = pFather;
            } else if (rank[pFather] < rank[qFather]) {
                this.parent[pFather] = qFather;
            } else{
                this.parent[pFather] = qFather;
                rank[qFather] += 1;
            }
        }
    }

对节点的路径进行压缩

计算机基础--->数据结构(9)【并查集】,计算机基础,# 数据结构,数据结构,并查集文章来源地址https://www.toymoban.com/news/detail-555959.html

    // 压缩方式一
    public int findParent(int index) {
        // 递归终止条件
        if (index == this.parent[index]) {
            return this.parent[index];
        }
        parent[index] = parent[parent[index]];
        return findParent(parent[index]);
    }

	// 压缩方式二
	public int findParent(int index) {
        // 递归终止条件
        int curIndex = index;
        while (curIndex != parent[curIndex]) {
            curIndex = parent[curIndex];
        }
        parent[index] = curIndex;
        return curIndex;
    }

到了这里,关于计算机基础--->数据结构(9)【并查集】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机复试面试基础知识(八股文)(数据库、数据结构、操作系统、计网、机组等)

    数据库绪论 1、简述三层模式、两级映射,分别有什么作用? 模式(逻辑模式):是数据库中全体数据的逻辑结构和特征的描述,是数据库系统模式结构的中间层,即不涉及数据的物理存储细节,也与具体应用程序开发工具语言无关。 外模式(用户模式):是用户能看见和使

    2023年04月09日
    浏览(96)
  • 系统架构设计师---计算机基础知识之数据库系统结构与规范化

    目录 一、基本概念  二、 数据库的结构  三、常用的数据模型         概念数据模型        基本数据模型        面向对象模型 四、数据的规范化      函数依赖       范式   1. 数据库 (DataBase, DB) : 是指长期储存在计算机内的、有组织的、可共享的数据集合。   

    2024年02月12日
    浏览(38)
  • 计算机导论07-算法和数据结构

    算法是 为使用计算机解决问题而制定的运算序列,是解决实际问题的方法及步骤 ;在计算机科学中,算法研究应用计算机程序处理问题的方法及其实现流程,是计算机问题解决方案的完整描述, 它是计算机科学的核心研究对象之一。 算法的概念 一般认为,算法(algorithm)

    2024年01月20日
    浏览(34)
  • 数据结构与算法:计算机科学的基石

    🎉欢迎来到数据结构学习专栏~数据结构与算法:计算机科学的基石 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:数据结构学习 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 🍹文章作者技术和水平有限,如果文中

    2024年02月11日
    浏览(35)
  • 【2023计算机考研】初试数据结构的院校汇总

    PS:学校具体考研信息在院校信息中输入学校名称搜索可查看 传送门:学校列表 - N诺计算机考研 专硕 北方工业大学 北京工商大学 北京石油化工学院 北京电子科技学院 中国农业大学 中央财经大学 北京物资学院 中央民族大学 天津职业技术师范大学 河北科技大学 石家庄铁道

    2024年02月13日
    浏览(53)
  • 只考一门数据结构!安徽工程大学计算机考研

    安徽工程大学 考研难度(☆) 内容: 23考情概况(拟录取和复试分析) 、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文992字,预计阅读:3分钟 2023考情概况 安徽工程大学计算机相关各专业复试和拟录取分析: 083500软件工程一志愿拟录取12人

    2024年02月10日
    浏览(28)
  • 王道计算机考研 数据结构C语言复现-第六章-队列

     这篇文章收录了王道考研课程中涉及的数据结构的所有代码。此外,本博客可能会添加一些额外的代码(不仅限于王道考研),因为408考试中会频繁考察一些冷门的知识点,所以这篇博客会涵盖所有相关的代码。这也是我数据结构的第一轮复习,希望能与大家共同进步。由

    2024年01月21日
    浏览(31)
  • 计算机保研面试常见问题(408数据结构简答题)

    1. 什么是时间复杂度?O(n)的O代表了什么? 答:时间复杂度是指执行算法所需要的计算工作量,可以用于描述一个程序的规模。O(n)中的O表示的是最坏情况下的时间复杂度。 2. 时间复杂度的量级排序是什么? 答:O(logn) O(n) O(nlogn) O(n^2) O(2^n) O(n!) 3. 顺

    2024年02月13日
    浏览(38)
  • 【23考研】计算机408数据结构代码题强化阶段划重点(王道书)

    视频链接:【23考研】10分钟带你整理408数据结构强化阶段代码题复习重点 本篇只适合考408的同学,请自主命题的同学自觉右上角×掉 因为王道书为了照顾自主命题的同学,所以很多算法也给出了代码实现,实际上对于考408的同学,很多代码是不需要掌握的,毕竟408的代码题没

    2024年02月15日
    浏览(34)
  • 【24计算机择校】37所只考数据结构的985/211院校汇总

    最新数据见:【24计算机择校】37所只考数据结构的985/211院校汇总_综合_N诺计算机考研 适合零基础和跨考的同学,不建议零基础的同学考408,如果只想上岸的话可以保持关注哦~ 注意:以下 数据来源23考研初试专业课情况 ,24考研可能会有部分院校改考,大家要及时关注我们

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包