转自:https://libhappy.com/2016/03/algs-1.3/

假设在互联网中有两台计算机需要互相通信,那么该怎么确定它们之间是否已经连接起来还是需要架设新的线路连接这两台计算机。这就是动态连通性问题。 动态连通性问题在日常生活中十分常见,比如上文所说的通信网络中的连通性问题,比如物理化学中的渗流问题。通过并查集这种数据结构及union-find 算法可以解决动态连通性问题。

动态连通性问题

概念

给出一系列的对象时,让其支持以下的两个操作:

  • 判断两个对象是否相连
  • 使两个对象相连

这里以整数代表对象,有0-9共十个整数,当给出一个整数对(a, b)时表示将整数a和b相连(如果a、b不相连)。如下图所示:

随着整数对的输入,十个整数的连通性会发生变化,这就是动态连通性问题

在动态连通性问题中,我们假设“相连”是一种等价关系,也就意味着它具有:

  • 自反性:p和p是相连的
  • 对称性:如果p和q是相连的,那么q和p也是相连的
  • 传递性:如果p和q是相连的且q和r是相连的,那么p和r是相连的。

在所有给出的对象中,所有相连的一组对象称为连通分量(Connected component)。如上图中最后一行的(0, 1, 2, 5, 6, 7)和(3, 4, 8, 9)分别为两个连通分量。

应用

  • 计算机网络:判断网络中的计算机是否可以通过已存在的连接直接通信;
  • 社交网络中的朋友关系:将朋友关系当作相连,判断两个人之间的朋友关系;
  • 计算机芯片中晶体管的连接问题:判断芯片中晶体管是否相连;
  • 变量名的等价性:某些编程语言(如FORTRAN)中允许声明两个等价的变量名,判断两个给定的变量名是否等价;
  • 数学集合中的元素:元素可能属于不同的集合,将元素“相连”表示将两个元素所属的集合合并成一个集合。

如在下图所示的所有连接中判断p和q点之间是否相连。

设计算法

转载于:https://www.cnblogs.com/bonelee/p/6410158.html

普林斯顿算法(1.3)并查集(union-find算法)——本质就是一个数 下面的子树代表了连在一起的点...相关推荐

  1. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  2. 基于C语言,详解Kruskal算法(利用并查集)实现构建最小生成树

    目录 一.Kruskal算法的基本介绍 具体做法:找出森林中连接任意两棵树的所有边中,具有最小权值的边,如果将它加入生成树中不产生回路,则它就是生成树中的一条边.这里的关键就是如何判断"将它 ...

  3. 并查集与贪心算法的应用之求解无向图的最小生成树

    一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...

  4. 【算法训练营】 - ⑩ 并查集与图

    [算法训练营] - ⑩ 并查集与图 并查集 并查集特征 并查集的优化 图 图结构的表达 图的面试题如何搞定? 图的数据结构 点 边 图 生成图 图算法 广度优先遍历 深度优先遍历 图的拓扑排序算法 最 ...

  5. 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】

    图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...

  6. 【数据结构与算法基础】并查集原理、封装实现及例题解析(C和java)

    前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...

  7. 基于并查集的kruskal算法

    #include <iostream> //并查集的kruskal算法using namespace std;const int max_ve=1005,max_ed=15005;int ...

  8. 亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例

    本文实例讲述了C++并查集亲戚(Relations)算法.分享给大家供大家参考.具体分析如下: 题目: 亲戚(Relations) 或许你并不知道,你的某个朋友是你的亲戚.他可能是你的曾祖父的外公的女 ...

  9. 数据结构-PHP 并查集(Union Find)

    文章目录 数据结构-PHP 并查集(Union Find) 1.并查集示意图 2.并查集合并 3.并查集简单的代码示例 3.1 PHP代码定义 3.2 输出演示 数据结构-PHP 并查集(Union ...

最新文章

  1. Cocoapods警告 - CocoaPods没有设置项目的基本配置,因为您的项目已经有自定义配置集
  2. Java接受blob类型图片_原生JS上传图片接收服务器端图片并且显示图片(主要描述blob类型)...
  3. SpringBoot应用日志通过logstash远程上传到ES
  4. flink下载以及兼容性问题
  5. linux依赖包在哪个目录,命令-Linux cmd在jar中搜索类文件,而与jar路径无关
  6. NILMTK——深扒组合优化(CO)和FHMM细节
  7. 区分Activity的四种加载模式-activity
  8. 怎么复活不了睡袋_测评 | 萌新的北京冬季户外睡袋初体验
  9. 基于CAS的低时延队列实现(原理示例)
  10. 无处 不在的无线智能——6g 的关键驱动与研究挑战_一文看懂什么是 6G
  11. 心情随笔(六):金秋十月备考之路亦别有一番风味
  12. RSA加密与签名的区别
  13. 合并两个有序数组(C语言)
  14. ai人工智能开发_面向开发人员的十大人工智能(AI)工具
  15. 2020版本idea 左视图跟随主视图定位操作
  16. 使用伪类来实现类似微信群聊的头像样式
  17. 使用PlayCanvas制作一个简单的小游戏(一)
  18. 图象关于y轴对称是什么意思_函数图象关于y轴对称是什么函数
  19. 神器-可视化分析之Basemap实战详解(二)
  20. linux 控制台退出命令,linux控制台命令

热门文章

  1. java replaceall lt_static lt;Tgt; boolean replaceAll(Listlt;Tgt; list, T oldVal, T newVal)_Java...
  2. em算法python代码_EM 算法求解高斯混合模型python实现
  3. java sftp nologin_SFTP连接通过Java询问奇怪的身份验证
  4. 【吐血整理】面试官问的那些Java原理你都懂吗
  5. 【深度学习】医学图像分割多标签损失函数和极坐标变换
  6. html纯css页面滑动效果,纯css3滑动按钮动画效果
  7. php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程
  8. 旧电脑装什么系统最快_旧电脑装什么系统最好?试试Porteus,小巧强悍,直降CPU占用率!...
  9. python项目主界面_python项目案例
  10. 利用逆矩阵解线性方程组_QR方法求解矩阵所有特征值(一)