上一篇文章介绍的2.quick find and quick union是基础版的,但是它无法处理大型数据集的动态连接,所以我们还要对其进行改进。
- weighted quick-union
1.1 基本思想
1.2 Java代码
1.3 python代码实现
1.4 复杂度分析 - weighted quick-union-改进2-压缩路径(path compression)
2.1 基本原理
2.2 Java代码
1.weighted quick-union
1.1 基本思想
由最基本的quick union中,并没有考虑两棵树的大小,如果一颗树比较大,但在结合的时候却被当成了另一颗非常小的树的子树,这样的安排明显是不合理的,因为两棵树结合后就会变成一颗非常畸形的树。
所以有人设计了weighted quick-union,就是为了应对这种情况的。
它的基本思想是这样的:
- 修改quick-union,使其不会有非常大的树
- 紧密监控每棵树的大小(元素个数)
- 通过较小的树节点和较大的树节点之间连接,使一个连接体保持平衡
之所以这么做是为了避免让树不要长成又长又高的树,用图像来说明就是:
如果用quick-union ,可能会把大的树放在下面,会产生比较高,且长的树,而qeighted则会监控每棵树,使得连接时,小的树总是在大的树的孩子节点上,这就避免的又高又长的树生成。
1.2 Java代码
与先前的基本一样,但是weighted增加了一个额外的数组