Algs4 union-find算法 带路径压缩的加权Quick-Union实现
2015-05-30 19:28
375 查看
Code
package sed.algorithm.chapter1.section5; public class PathCompressWeightedQuickUnionUF { private int[] id; private int[] sz; private int count; public PathCompressWeightedQuickUnionUF(int max) { id = new int[max]; sz = new int[max]; for (int i = 0; i < id.length; i++) { id[i]=i; } for (int i = 0; i < id.length; i++) { sz[i]=1; } count = max; } public int count(){ return count; } public int find(int p){ int pParent = p; while(id[pParent]!=pParent){ pParent=id[pParent]; } while(id[p]!= p){ p=id[p]; id[p]=pParent; } return pParent; } public boolean connected(int p, int q){ return find(p)== find(q); } public void union(int p, int q){ int pRoot = find(p); int qRoot = find(q); if (pRoot!=qRoot) { if (sz[pRoot] < sz[qRoot]) { id[pRoot] = qRoot; sz[qRoot] += sz[pRoot]; }else { id[qRoot] = pRoot; sz[pRoot] += sz[qRoot]; } count--; } } }
Input
100 million points , 200million links
Notes:
速度不是一般的快,之前用quick union 算法 跑了一个多小时。。。 (其实我也不想的,因为测试代码里面类引用错了,一直以为用的是这个算法,其实用的是最简单的quick union)。TT 改了以后还没要一分钟。
相关文章推荐
- SQL学习笔记六 union联合结果集使用
- SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍
- SQLSERVER中union,cube,rollup,cumpute运算符使用说明
- 字符串查找 cmd find命令
- Jquery中find与each方法用法实例
- jQuery初学:find()方法及children方法的区别分析
- union组合结果集时的order问题
- 数据库中union 与union all 的区别
- rsync结合find技巧分享
- MySQL的FIND_IN_SET函数使用方法分享
- Jquery find与filter函数区别 说明
- 深入SQL SERVER合并相关操作Union,Except,Intersect的详解
- MySQL union 语法代码示例分析
- sql Union和Union All的使用方法
- union这个连接是有什么用的和INNER JOIN有什么区别
- nunit使用指南之―NUnit Quick Start
- C++联合体union用法实例详解
- C语言、C++中的union用法总结
- MySQL中使用自定义变量 编写偷懒的UNION示例
- 详解MySQL中UNION的用法