Week1-4Qucik-Union Improvments
2015-09-11 23:22
246 查看
Improvement 1: weighting
weighted quick union
modify quick-union to avoid tall treeskeep track of size of each tree(number of each objects)
balance by linking root of smaller tree to the root of larger tree(larger tree on top, small tree goes below)
No item is too far from the root of its component!!!
Implementation
Data Structure
same as quick-union, but maintain extra array sz[i] to count number of objects in the tree rooted at i.Find( p, q )
Identical to quick-unionreturn root( p ) == root( q );
Union( p, q )
link root of smaller trees to larger treesupdate sz[] array
int i = root( p ), j = root( q ); if( i == j ) { return; } if( sz[i] < sz[j] ) { id[i] = j; sz[j] += sz[i]; } else { id[j] = i; sz[i] += sz[j]; }
Analysis
Running Time
Find: proportional to the depth of p and qUnion: constant time given roots
Proposition
Depths of any node x is at most lgN(base 2)Algorithm | Initialize | Union | Connected |
---|---|---|---|
quick-find | O(N) | O(N) | O(1) |
quick-union | O(N) | O(N) | O(N) |
weighted QU | O(N) | O(logN) | O(logN) |
Improvement 2: Path Compression
Just after computing the root of p, set the each examined node to point to that root.
Implementation
Two-pass implementation: second loop to set the id[] of each examined to the rootOne-pass variant: make every node in path points to its grandparent(halving path length)
private int root( int i ) { while( i != id[i] ) { id[i] = id[id[i]]; i = id[i]; } return i; }
Keep the tree almost flat!!
Analysis(weighted QU with path compression)
Proposition
Starting from and empty data structure, any sequence of m union-find ops on N objects makes ≤c(N+Mlog∗N) array access.(near linear)Cost Comparison
There is no linear algorithm for Union-Find ops, but WQUPC is linear in most cases.
相关文章推荐
- ECSHOP小记
- 百度API集市与图灵机器人
- 10大互联网危机公关事件:什么才是解围的正确姿势?
- 张祖勋:摄影测量的信息化与智能化
- 手机浏览器调试建议
- UEditor+七牛,实现图片直连上传
- Unknown type name "CGRect",did you mean "Rect"?的解决方案
- Python连接MySQL
- 下载安装oracle11g
- 基于色域Rgb通道的MATLAB图像选择
- 8086CPU
- 腾讯社招面试经历
- c语言中对于文件操作的一些学习
- iOS _UIViewController _loadViewFromNibNamed:bundle 错误问题
- Can t connect to MySQL server on 解决方法
- ADF:如何实现字段值的转换,并设置内容颜色
- wrong code
- 数据库 之 入门篇
- 课后练习Javascript
- 远程调用方式概述