并查集(disjoint set)的实现及应用
这里有一篇十分精彩、生动的 并查集详解 (转);
- “朋友的朋友就是朋友”⇒ 传递性,建立连通关系
disjoint set,并查集(一种集合),也叫不相交集,同时也是一种树型的数据结构;用于处理一些不相交集合(Disjoint Sets)的合并(merge)及查询(find)问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。
并查集的构成:
整数型的数组
- 数组 pre[] 记录了每个点的前导点是什么,pred[] ⇒ 会形成一棵树形结构,树形结构的根,即为整棵树的代表(reps)
两个函数构成
- 函数 find 是查找;
- join 是合并;
1. 简单实现
find(暂不考虑,路径压缩的问题,path compression)
int pred[1000];int find(int x){int r = x;while (r != pred[r]){r = pred[r];}return r; }
join
void find(int x, int y){int rx = find(x), ry = find(y);if (rx != ry)pred[rx] = ry;// 因为 rx 是 x 等的代表 ⇒ pred[rx] == rx// 如此以来,x 所在的树,y 所在的树就实现了连通; }
2. 含有路径压缩的实现
路径压缩的概念可通过下图清晰地展示出来,
路径压缩之后,减少了中间的传递过程,一步直达根节点(总代表);
但需要注意的是,执行一次 find,只把一个分支,统一化为两层结构;
int find(int x)
{ int r=x; while(r!=pre[r]) r=pre[r]; int i=x,j; while(pre[i]!=r) { j=pre[i]; pre[i]=r; i=j; } return r;
}
转载于:https://www.cnblogs.com/mtcnn/p/9423793.html
并查集(disjoint set)的实现及应用相关推荐
- 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) ...
- 数据结构 7并查集(DISJOINT SET)
并查集(The disjoint set ADT) 等价关系 Relation R:若对于每一对元素(a,b),a,b∈S,aRb或者为true或者为false,则称集合S上定义关系R.如果aRb为t ...
- python【数据结构与算法】并查集引入
文章目录 1 并查集 2 策略 3 代码 1 并查集 Disjoint Set,实际上字面翻译是不相交的集合. 中文名 "并查集" 实际上源自其基本操作: union(X,Y):求 ...
- NOIp 数据结构专题总结 (1):STL、堆、并查集、ST表、Hash表
系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) STL structure std::vector #include <vector> std::vec ...
- 并查集入门+初级专题训练
介绍 摘自罗勇军,郭卫斌的<算法竞赛入门到进阶>上的说明: 并查集(Disjoint Set)是一种非常精巧而且食用的数据结构,它主要用于处理一些不相交集合的合并问题.经典的例子有 ...
- 算法总结 — 并查集
参考:算法学习笔记(1) : 并查集 - 知乎 并查集 (disjoint set union) 是 最优美的数据结构之一 合并 (merge): 把两个集合合并 查找 (find): 查找一个元素的 ...
- 图论学习四之Disjoint set union并查集
分离集合 • 在有的问题中,需要对不相交的集合(disjoint set)进行这样两种操 作: • 检索某元素属于哪个集合 • 合并两个集合 • 此时,我们可以使用并查集维护这两个操作. 并查集的 ...
最新文章
- MySQL第8天:MySQL索引优化分析之SQL慢
- c++矩阵作为函数输入变量_现代控制理论线性系统入门(七)输入输出解耦的控制器设计...
- Android TextView 属性设置
- struts2上传文件类型限制
- 机器学习(一)—— 线性回归
- 5G精华问答 | 5G关键技术解读
- Robotium 数据驱动测试框架
- python发送文件_python:socket传输大文件
- 免除抠图困扰,专供PNG图片素材网站你知道么?
- 微软为开源计算器加入全新的图形功能
- 系统学习深度学习(九)--激活函数总结
- 微型计算机测试题答案,微机原理试题及答案(考试必备)
- 天猫达尔文商品管理体系通俗简介
- Windows10的电脑如何查找AppData文件夹
- Android系统内存优化
- 台式计算机怎么开声音,台式电脑没有声音怎么办
- php获取手机的mac地址,Android手机获取Mac地址的几种方法
- 设计模式|职责链模式--流程状态审批(枚举实现)
- 数值计算笔记-部分主元消去cholesky分解
- JavaSE百炼成钢之新手入门(一)