几种合并查找算法

来源:互联网 发布:三国志乱舞软件 编辑:程序博客网 时间:2024/06/15 13:32

问题:

实际中需要知道拓扑图中的2点是否连通,比如电路板、地图中不同的城市等等,这种问题可以转化为合并查找问题,相应的求解可以用合并查找算法。

基本思想是转化为长度为N的数组和已知M对连通对,其值表示了两个点是否连通。

合并查找算法 (union-find)可以有以下几种:

1、快速查找算法

     mark连通时遍历整个数组,使得连通指向最新的节点

2、快速合并算法

     不需要遍历整个数组,只遍历已连通的子串,然后合并新加入连通节点对应的根节点

3、带权的快速合并算法

     为避免合并的最坏情况,利用额外的数组表示连通子串长度,保证合并时短串合并到长串。查找代价为logN

4、路径压缩的带权快速合并算法

     为减少查找代价,利用路径压缩,使得查找最小(1或者2),但是实现代价复杂

5、等分的带权快速合并算法

     折中的路径压缩,合并时向上跳一个节点,实现简单,查找代价也大为减少。