并查集路径压缩方法
来源:互联网 发布:对人工智能的看法作文 编辑:程序博客网 时间:2024/05/29 08:56
并查集路径压缩方法
使用并查集查找时,如果查找次数很多,那么使用朴素版的查找方式肯定要超时。比如,有一百万个元素,每次都从第一百万个开始找,这样一次运算就是10^6,如果程序要求查找个一千万次,这样下来就是10^13,肯定要出问题的。
这是朴素查找的代码,适合数据量不大的情况:
int findx(int x){ int r=x; while(parent[r] !=r) r=parent[r]; return r;}
下面是采用路径压缩的方法查找元素:
int find(int x) //查找x元素所在的集合,回溯时压缩路径{ if (x != parent[x]) { parent[x] = find(parent[x]); //回溯时的压缩路径 } //从x结点搜索到祖先结点所经过的结点都指向该祖先结点 return parent[x];}
上面是一采用递归的方式压缩路径, 但是,递归压缩路径可能会造成溢出栈,我曾经因为这个RE了n次,下面我们说一下非递归方式进行的路径压缩:
int find(int x){ int k, j, r; r = x; while(r != parent[r]) //查找跟节点 r = parent[r]; //找到跟节点,用r记录下 k = x; while(k != r) //非递归路径压缩操作 { j = parent[k]; //用j暂存parent[k]的父节点 parent[k] = r; //parent[x]指向跟节点 k = j; //k移到父节点 } return r; //返回根节点的值
转载出处:http://www.cnblogs.com/vongang/
0 0
- 并查集路径压缩方法
- 并查集 & 路径压缩
- 【并查集+压缩路径】
- 并查集路径压缩
- 并查集路径压缩
- 并查集路径压缩
- 并查集路径压缩
- 并查集压缩路径
- 并查集 压缩路径
- 并查集路径压缩
- 并查集 ---压缩路径
- 并查集 路径压缩
- 并查集压缩路径
- 并查集压缩路径
- 并查集-路径压缩
- 并查集 路径压缩
- 并查集&&压缩路径
- 并查集(路径压缩)
- iOS-UITextView设置行间距,内容颜色(变相设置类似UITextField的placeholder)
- at命令的用法
- “java.exe”已退出,代码为 1。
- mysql5.7.13+VS3013 源代码阅读调试
- 【3】 文本挖掘方法论
- 并查集路径压缩方法
- 移花接木 搞定笔记本上的oracle 数据库
- react与框架整合
- AngularJs的路由、模块化与依赖注入
- UVALive 4225 Prime Bases(math)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- php 获取当前毫秒时间
- Cookie禁用了,Session还能用吗?
- JDBC 连接数据库