不相交集类(并查集)
来源:互联网 发布:淘宝网毛衣女 编辑:程序博客网 时间:2024/05/06 13:55
并查集 就是只有合并和 查找操作的一种数据结构 很简单,主要判断一个元素是否在一个集合里 主要应用在最小生成树(Kruskal算法),看到图的时候会将实现代码贴上
package chapter8;/** * 类名:DisjSets 说明:实现并查集 按高度求并,路径压缩 s[i]代表i的父节点 */public class DisjSets {public DisjSets(int numElements) {s = new int[numElements];for (int i = 0; i < numElements; i++)s[i] = -1;}/** * 方法名:union1 说明:将root2的父节点指为root1 */public void union1(int root1, int root2) {s[root2] = root1;}/** * 方法名:union2 说明:按高度求并 */public void union2(int root1, int root2) {root1 = find(root1);root2 = find(root2);if(root1 == root2)return;else{//root1的高度大于 root2的 则将root2成为root1的子树if(s[root1] > s[root2])s[root2] = root1;else{if(s[root1] == s[root2])s[root2]++;s[root1] = root2;}}}/** * 方法名:union3 说明:按树的大小来合并,每个根的数组元素就是它包含树的大小的负值 */public void union3(int root1, int root2) {root1 = find(root1);root2 = find(root2);if (root1 == root2)return;else {// s[root1]< s[root2]说明 root1树大 将root2成为它的子树if (s[root1] < s[root2]) {s[root2] = root1;s[root1] += s[root2];//更新根节点} elses[root1] = root2;s[root2] += s[root1] + s[root2];}}/** * 方法名:find 说明:实现路径压缩 只是加了简单的一步 将s[x]指向不断递归所得到的根 */public int find(int x) {if (s[x] < 0)return x;elsereturn s[x] = find(s[x]);}private int[] s;public static void main(String[] args) {// TODO Auto-generated method stub}}
0 0
- 并查集(不相交集)
- 不相交集(并查集)
- 并查集(不相交集合)
- 并查集(不相交集合)
- 不相交集合(并查集)
- 不相交集类(并查集)
- 不相交集(并查集)(C++)
- 不相交集合 - 并查集
- 不相交集合 - 并查集
- 不相交集合-并查集
- 并查集(不相交集)C++实现
- 不相交集 / 并查集(C语言实现)
- 并查集(不相交集合)基础知识详解
- 用于不相交集合的数据结构(并查集)
- 并查集 (不相交集数据结构)
- 并查集(不相交集)原理及JAVA实现
- 不相交集合的数据结构-并查集
- 【并查集】 不相交集合 - 并查集 教程(文章作者:Slyar)
- Redis系统性介绍
- 2014腾讯WE大会:开启未来的五大科技发展趋势
- 嵌入式Linux NFS开发环境搭建
- 数据结构之排序算法性能分析比较
- 聚类算法分析及其性能比较
- 不相交集类(并查集)
- 【Android开发】Activity切换动画
- JavaScript 日期格式化 简单实用
- cookie和session的区别
- Socket网络编程
- BoW(词袋)模型详细介绍
- 黑马程序员——反射
- struts2(1)--第一个hello world
- 数据挖掘常用聚类算法性能比较