问题:
实际中需要知道拓扑图中的2点是否连通,比如电路板、地图中不同的城市等等,这种问题可以转化为合并查找问题,相应的求解可以用合并查找算法。
基本思想是转化为长度为N的数组和已知M对连通对,其值表示了两个点是否连通。
合并查找算法 (union-find)可以有以下几种:
1、快速查找算法
mark连通时遍历整个数组,使得连通指向最新的节点
2、快速合并算法
不需要遍历整个数组,只遍历已连通的子串,然后合并新加入连通节点对应的根节点
3、带权的快速合并算法
为避免合并的最坏情况,利用额外的数组表示连通子串长度,保证合并时短串合并到长串。查找代价为logN
4、路径压缩的带权快速合并算法
为减少查找代价,利用路径压缩,使得查找最小(1或者2),但是实现代价复杂
5、等分的带权快速合并算法
折中的路径压缩,合并时向上跳一个节点,实现简单,查找代价也大为减少。