这里有一篇十分精彩、生动的 并查集详解 (转);

  • “朋友的朋友就是朋友”⇒ 传递性,建立连通关系

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)的实现及应用相关推荐

  1. C++用并查集Disjoint union实现connected component连通分量(附完整源码)

    C++用并查集Disjoint union实现connected component连通分量 C++用并查集Disjoint union实现connected component连通分量完整源码(定义 ...

  2. C++并查集Disjoint Set(附完整源码)

    C++并查集Disjoint Set 并查集Disjoint Set算法的完整源码(定义,实现,main函数测试) 并查集Disjoint Set算法的完整源码(定义,实现,main函数测试) #in ...

  3. C语言实现并查集(Disjoint set或者Union-find set)(附完整源码)

    实现实现并查集 实现并查集(Disjoint set或者Union-find set)的完整源码(定义,实现,main函数测试) 实现并查集(Disjoint set或者Union-find set) ...

  4. 数据结构 7并查集(DISJOINT SET)

    并查集(The disjoint set ADT) 等价关系 Relation R:若对于每一对元素(a,b),a,b∈S,aRb或者为true或者为false,则称集合S上定义关系R.如果aRb为t ...

  5. python【数据结构与算法】并查集引入

    文章目录 1 并查集 2 策略 3 代码 1 并查集 Disjoint Set,实际上字面翻译是不相交的集合. 中文名 "并查集" 实际上源自其基本操作: union(X,Y):求 ...

  6. NOIp 数据结构专题总结 (1):STL、堆、并查集、ST表、Hash表

    系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) STL structure std::vector #include <vector> std::vec ...

  7. 并查集入门+初级专题训练

    介绍   摘自罗勇军,郭卫斌的<算法竞赛入门到进阶>上的说明:   并查集(Disjoint Set)是一种非常精巧而且食用的数据结构,它主要用于处理一些不相交集合的合并问题.经典的例子有 ...

  8. 算法总结 — 并查集

    参考:算法学习笔记(1) : 并查集 - 知乎 并查集 (disjoint set union) 是 最优美的数据结构之一 合并 (merge): 把两个集合合并 查找 (find): 查找一个元素的 ...

  9. 图论学习四之Disjoint set union并查集

    分离集合 • 在有的问题中,需要对不相交的集合(disjoint set)进行这样两种操   作: • 检索某元素属于哪个集合 • 合并两个集合 • 此时,我们可以使用并查集维护这两个操作. 并查集的 ...

最新文章

  1. MySQL第8天:MySQL索引优化分析之SQL慢
  2. c++矩阵作为函数输入变量_现代控制理论线性系统入门(七)输入输出解耦的控制器设计...
  3. Android TextView 属性设置
  4. struts2上传文件类型限制
  5. 机器学习(一)—— 线性回归
  6. 5G精华问答 | 5G关键技术解读
  7. Robotium 数据驱动测试框架
  8. python发送文件_python:socket传输大文件
  9. 免除抠图困扰,专供PNG图片素材网站你知道么?
  10. 微软为开源计算器加入全新的图形功能
  11. 系统学习深度学习(九)--激活函数总结
  12. 微型计算机测试题答案,微机原理试题及答案(考试必备)
  13. 天猫达尔文商品管理体系通俗简介
  14. Windows10的电脑如何查找AppData文件夹
  15. Android系统内存优化
  16. 台式计算机怎么开声音,台式电脑没有声音怎么办
  17. php获取手机的mac地址,Android手机获取Mac地址的几种方法
  18. 设计模式|职责链模式--流程状态审批(枚举实现)
  19. 数值计算笔记-部分主元消去cholesky分解
  20. JavaSE百炼成钢之新手入门(一)

热门文章

  1. hdu 2879【留坑】
  2. SDUT_2075 最少拦截系统
  3. gnuplot_i 文件的说明,翻译成的中文
  4. 关于调用子函数给主函数指针分配内存
  5. 无重复字符的最长子串【哈希算法】-O(n)
  6. Python(Windows)下安装各种库的多种方法总结--灵活使用pip
  7. pyqt5入门教程(二)
  8. 多协程实例讲解(python 三)
  9. [MIPS汇编语言]简单排序实现
  10. 数值分析与算法-喻文健-国科大