首页 > 编程语言 >九、并查集-算法总结

九、并查集-算法总结

时间:2024-09-17 08:51:43浏览次数:9  
标签:总结 结点 int 查集 节点 算法 Quick id 9.2

文章目录

九、并查集

9.1 简介

并查集用于处理不相交集合的合并与查询问题,常见操作有:

  • 查询:查询元素属于哪个集合,可用于判断元素是否在一个集合中
  • 合并:合并两个集合
    应用场景:动态连通性的判断,且不需要给出具体路径

9.2 数据结构

9.2.1 初始化

id数组存放的是结点的组号,初始化时将每个结点单独分为一组

private int[] id;

public DisjoinSet(int size) {
    id = new int[size];
    for(int i = 0; i < size; i++)
        id[i] = i;
}

9.2.2 Quick-Find

由于使用整数表示结点,可以通过数组实现结点到组编号的映射

public void union(int p, int q) { 
    // 获得p和q的组号
    int pID = id[p];
    int qID = id[q];
    // 如果两个组号相等,直接返回
    if (pID == qID) return;
    // 遍历一次,改变组号使他们属于一个组
    for (int i = 0; i < id.length; i++)
        if (id[i] == pID) id[i] = qID;
    count--;
}

9.2.3 Quick-Union

id数组存放的是结点的父节点索引,根节点的父节点是自身,通过这点判断能到达根结点

private int find(int p) { 
    // 寻找p节点所在组的根节点,根节点具有性质id[root] = root
    while (p != id[p]) p = id[p];
    return p;
}
public void union(int p, int q) { 
    // Give p and q the same root.
    int pRoot = find(p);
    int qRoot = find(q);
    if (pRoot == qRoot) 
        return;
    // 将一棵树(即一个组)变成另外一课树(即一个组)的子树
    id[pRoot] = qRoot;    
    count--;
}

9.2.4 Weighted Quick Union

保存两棵树的大小,每次将小的合并到大的树中

标签:总结,结点,int,查集,节点,算法,Quick,id,9.2
From: https://blog.csdn.net/weixin_44063529/article/details/142267024

相关文章

  • 常见的限流算法
    限流算法是用于控制访问频率、保护系统免受过载攻击的重要手段。常见的限流算法有以下几种,每种算法都有不同的应用场景和优缺点。下面是几种常见的限流算法的详细介绍:1.计数器算法(Counter)原理计数器算法是最简单的限流算法。它在固定的时间窗口内记录请求的次数,一旦请求次......
  • 【智能算法应用】粒子群算法求解最小生成树问题
    目录1.最小生成树MST2.算法原理3.算法过程4.结果展示5.参考文献6.代码获取1.最小生成树MST最小生成树(MinimumSpanningTree,MST)是在给定的加权无向图中寻找一个边的子集,使得这些边构成的树包含图中的所有顶点,并且边的总权重尽可能小。如果图......
  • 【智能算法应用】海洋捕食者算法求解TSP问题
    目录1.算法原理2.TSP数学模型3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】海洋捕食者算法(MPA)原理及实现2.TSP数学模型旅行商问题(TSP)是一种著名的组合优化问题,它涉及寻找给定一组城市及其之间的距离或成本,如何规划一条最短的路径,使得旅行商从起点出发,......
  • 【智能算法应用】飞蛾扑火算法求解TSP问题
    目录1.算法原理2.TSP数学模型3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】飞蛾扑火算法(MFO)原理及实现2.TSP数学模型旅行商问题(TSP)是一种著名的组合优化问题,它涉及寻找给定一组城市及其之间的距离或成本,如何规划一条最短的路径,使得旅行商从起点出发,访......
  • 文心一言 VS 讯飞星火 VS chatgpt (348)-- 算法导论23.2 7题
    七、假定图G的一棵最小生成树已经被计算出来。如果在图中加入一个新结点及其相关的新边,我们需要多少时间来对最小生成树进行更新?如果要写代码,请用go语言。文心一言:在图中加入一个新节点及其相关边后,要更新最小生成树(MST),通常意味着需要重新计算包含新节点的最小生成树,因为新节点的加......
  • 常用PDF库总结
    本帖内容源自,在此仅做记录PDF(PortableDocumentFormat)是一种便携文档格式,便于跨操作系统传播文档。PDF文档遵循标准格式,因此存在很多可以操作PDF文档的工具,Python自然也不例外。本文从功能、开源协议及社区活跃度三方面对比7个常用的Python第三方库,以便根据具体需求选择合适的......
  • 每日总结
    9.16上午补了一下暑假姚子奇讲的题,让姚子奇给我调个题他都不带鸟我的。P4180[BJWC2010]严格次小生成树先用kruskal将最小生成树求出来,之后再枚举不在最小生成树的每条边,设每条边的端点为x,y,如果加入这条边,则会形成一个环,于是我们考虑用这条边替换x和y路径上的一条边,但是由于是......
  • 今日总结
    一、什么是大数据1.1定义麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征我自己的定义:大数据是一门旨在研究如何在巨大的数据集......
  • 20240916总结
    不积跬步,无以千里。这两天主要是复习了图的连通性相关的题+听了youwike哥哥讲课。先是复习了缩点,割点,割边,点双,边双,2-SAT,感觉比较需要注意的是割点的那个第一个节点的判断,写题的时候总是容易忘。然后又写了几道练习题。缩点#include<iostream>#include<cstring>usingna......
  • 今日总结1.1
    第一章:软件开发概述     1.1软件与程序1.1.1从程序到软件 计算机程序(简称程序)是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列;软件是能够完成预定功能和性能的可执行的程序和使程序正常执行所需要的数据,加上描述软件开发过程及其管理、程序的操......