并查集解决什么问题?
解决动态连通性问题的算法
快速查找算法和快速合并算法,以及这些算法的实验和改进
开发算法的有效流程:
- 建立问题模型,数学模型,高清问题的实质,实践检验模型
- 找出解决该问题大体上所需的基本操作,
- 据此找出算法解决该问题,
- 有可能算法足够快,符合存储空间的要求,也有可能算法不够快,存储空间不足,提出心酸放,一直循环,直到满意为止
问题阐述:
有一组共N个对象,用0到N 的数字来标记他们,两个对象间可以连通,假设有一组命令可以连通两个对象,将两个对象用命令链接,问题是连通性查询,查询两个对象之间是否已有联通的路径存在,
合并命令与联通查询的交叉混合,已知一些对象两两的连通,求俩对象是否连通
问题解决环境
用计算机去解决这个问题,人类需要花一些时间来思考问题,
并查集在生活中的具体实例
这些算法用在图像上,应用对象就是像素,用在网络上,对象就是计算机,社交网络上,应用对象就是
人,用在计算机芯片上,应用对象就是电路元件,对象可以是抽象的,程序的变量名,数学集合中的元素,也可以是物理对象如符合体系中的金属位,用0到N为之编号存在数组中,
连接的特征:
连接到是对称的,连接到是传递性的,
连通分量性质:
连通分量中任意两个对象都是相连接的,就是不与外边的连接,一条子链
我们要维护连通分量就是查找两个对象是否在相同的分量中,合并命令就是,将包括量个对象的分量替换为其并集,
在Java中
Java中就是创造一个UF的类,一个用来实现合并,另一个用来实现连接查找,返回一个bool,构造器需要对象的数量作为参数,以此建立数据结构.对象的数量和操作的数量都有可能是巨大的,可能会有非常大的合并与连接查询,算法在此环境下必须是高效的,
我们检查我们应用应用编程接口API设计,设计一个使我们开发的数据类型的客户端来检查API,测试客户端
课程地址
https://www.coursera.org/learn/algorithms-part1/lecture/fjxHC/dynamic-connectivity