数据结构 之 并查集(Disjoint Set)
注意。等价类形成对S的一个划分:S的每个成员恰好相互排斥地出如今一个等价类中。为了确定是否a~b,我们仅需验证a和b是否属于同一个等价类就可以。
初始的描写叙述是全部的关系均为false(自反的除外)。每一个集合都有一个不同的元素。从而S(i)&&S(j) = NULL,这使得这些集合是不相交的(Disjoint)。
假设我们希望加入关系a~b。那么我们首先须要知道a和b是否已经存在关系。这能够通过对a和b运行Find检验它们是否属于同一个等价类来完毕。
假设它们不在同一类中,那么我们使用求并运算(Union),这样的运算把含有a和b的两个等价类合并成一个新的等价类。
0
|
0
|
0
|
0
|
0
|
5 |
5
|
7
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
1 |
2
|
3
|
4
|
5
|
5 |
5
|
7
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
声明:
makeSet(int x[])函数:
因为初始化时,每一个元素各自为单独的集合,因此,我们设置每一个元素的父节点为0(或节点自己)。
unionSet(int x, int y)函数:
findSet(int x)函数:
而对于合并union操作,将两个元素所在的集合合并起来。即将两个链表合并起来,一般能够使用两种方法。一种是头头相连,一种是头尾相连。可是,不管是哪种合并方法,都须要经历查找过程,找到链表的头节点,然后再进行连接操作。综合看来,其查找和合并操作所需的时间复杂度高于根树的实现方法。
路径压缩在一次findSet2操作期间运行而与用来运行unionSet的方法无关。
设操作为findSet2(x),此时路径压缩的效果是。从x到根的路径上的每一个节点都使它的父节点变为根。
在初始化过程中,须要对每一个节点(集合)进行rank字段的初始化。
为了使合并后的树的深度的添加尽可能小,我们应该考虑的是树的秩,即根节点的秩。而不是儿子节点的秩。
而发生变化的情况仅仅有一种:那就是合并前的两个集合的秩相等,这样必定会有当中一个集合的树的根指向另外一个集合的树的根节点。这样新的集合的秩必定添加1。
假设x,y是亲戚。那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。
接下来的m行:每行两个数Mi、Mj (1< =Mi、Mj< =N),表示Mi和Mj具有亲戚关系。
接下来的p行:每行两个数Pi、Pj,询问Pi和Pj是否具有亲戚关系。
表示第i个询问的答案为“具有”或“不具有”亲戚关系。
这样。题意就转换为:
#include <stdio.h>
int p[MAX];
int main(void)
数据结构 之 并查集(Disjoint Set)相关推荐
- 数据结构 7并查集(DISJOINT SET)
并查集(The disjoint set ADT) 等价关系 Relation R:若对于每一对元素(a,b),a,b∈S,aRb或者为true或者为false,则称集合S上定义关系R.如果aRb为t ...
- C++用并查集Disjoint union实现connected component连通分量(附完整源码)
C++用并查集Disjoint union实现connected component连通分量 C++用并查集Disjoint union实现connected component连通分量完整源码(定义 ...
- C++并查集Disjoint Set(附完整源码)
C++并查集Disjoint Set 并查集Disjoint Set算法的完整源码(定义,实现,main函数测试) 并查集Disjoint Set算法的完整源码(定义,实现,main函数测试) #in ...
- C语言实现并查集(Disjoint set或者Union-find set)(附完整源码)
实现实现并查集 实现并查集(Disjoint set或者Union-find set)的完整源码(定义,实现,main函数测试) 实现并查集(Disjoint set或者Union-find set) ...
- 数据结构-PHP 并查集(Union Find)
文章目录 数据结构-PHP 并查集(Union Find) 1.并查集示意图 2.并查集合并 3.并查集简单的代码示例 3.1 PHP代码定义 3.2 输出演示 数据结构-PHP 并查集(Union ...
- 数据结构 之 并查集
并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题. 有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构 ...
- 数据结构之并查集Union-Find Sets
1. 概述 并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题. 2. 基本操作 并查集 ...
- 数据结构之并查集:并查集的介绍与Python代码实现——18
并查集的介绍 并查集(Union-find)数据结构也称作合并查找集(Merge-find set)或者不相交集数据结构(disjoint-set data structure),它是一种记录了由一个 ...
- [重修数据结构0x03]并查集、堆、优先队列(2021.8.11)
前言 在做遍历的题目的时候,发现掌握一些特殊的数据结构和技巧有时对解决题目有着决定性的作用,不可不学.因此特地拿出来两天学习一下并查集.堆.优先队列.以后有更多思考和感悟再加补充吧.内容来自算法笔记, ...
最新文章
- swift文件服务器,Swift3一行代码将各种类型文件上传到服务器
- libjpeg-turbo介绍及测试代码
- 是第一个成功设计微型计算机的人,()是第一个成功设计微型计算机的人。
- Elasticsearch 2.20入门篇:基本操作
- linux自学笔记--memcache和varnish缓存服务器
- java实现redis客户端_Java实现Redis客户端
- 火狐插件 Katalon Recorder 生成 python 等语言 代码
- 机器学习系列(19)_通用机器学习流程与问题解决架构模板
- 位图转矢量图工具,快和模糊图片说白白
- php支付sdk接入网站教程,laravel 5.5 接入蚂蚁金服官方SDK(支付宝APP支付为例)开发步骤...
- 主持人大赛-即兴主持之新闻稿
- 个税计算器 / 微信小程序开发
- 20、中断和动态时钟显示
- 【论文笔记】图匹配的路径跟随算法
- 从“贫民窟”里走出来的亿万富豪
- 一文带你读懂 Promise
- 0基础软件测试小白,如何找到一份高薪的工作?
- 专访陈勇: 敏捷开发现状及发展之路
- Egg 实现一个 mTime 时光网
- 如何在互联网以最快速度赚够十万?
热门文章
- python循环5次_Python自学之路五:分支,循环,迭代
- IntObjectHashMap和HashMap的区别?
- 若依集成ueditor富文本编辑器
- cta策略 有哪些_CTA量化策略学习笔记
- 焦作一中高考成绩查询2021,焦作高中学校排名2021最新排名,焦作高中排名前十
- 银行突发事件演练方案_【工作动态】准旗联社组织开展优质文明服务应急演练,为优质服务保驾护航!...
- html画布实现小球沿直线下落,[面向对象的案例]在canvas画布内实现小球的随机移动...
- strchr和strstr函数
- Iplat62---CRUD
- django url 生效_django 定制管理页面外观 模板文件不生效的解决方法