type
status
password
date
slug
summary
category
URL
tags
icon
Union-Find 算法,也就是常说的并查集算法。适合于判断,给出一组结点,判断他们是否联通。从判断是否为图(一个节点的两个边都会指向同一节点–构成三角形从而不再是树)到岛屿问题(如果节点不与其它节点联通,则会孤立成一个岛屿)。Union-Find 算法的 API主要有以下两个:
原理
优化
平衡性优化
我们一开始就是简单粗暴的把
e1
所在的树接到e2
所在的树的根节点下面,那么这里就可能出现「头重脚轻」的不平衡状况,比如下面这种局面:长此以往,树可能生长得很不平衡。我们其实是希望,小一些的树接到大一些的树下面,这样就能避免头重脚轻,更平衡一些。
路径压缩
可见,调用
find
函数每次向树根遍历的同时,顺手将树高缩短了,最终所有树高都不会超过 3