并查集
- 两个元素之间呈现出集合的关系。
- 各个元素可以划分为所干个不相交的子集。
- 用互不相交的树表示多个集合。(定义一个长度为 n 的数组表示,所有为 -1 的节点都是根节点,都是一个集合)
- 操作:
- 查:通过一路向上查找根即可。
- 并:将另一个树连接成一个树的子树即可。(尽量将小树合并到大树,降低树高度,提高查询速度)
- 适合采用双亲表示法。(每个节点只关心其父节点,为了更快的查找)
- 优化:(树越高,查询复杂度越高)
- 压缩路径:将查找路径上的节点全部挂在根下面。(可以使树的高度不超过
O
(
α
(
n
)
)
O(\alpha(n))
O(α(n)),对于常见的 n 值,通常
α
(
n
)
≤
4
\alpha(n)\le4
α(n)≤4,可以将优化后的并查集开销时间压缩的很低)
- 压缩路径:将查找路径上的节点全部挂在根下面。(可以使树的高度不超过
O
(
α
(
n
)
)
O(\alpha(n))
O(α(n)),对于常见的 n 值,通常
α
(
n
)
≤
4
\alpha(n)\le4
α(n)≤4,可以将优化后的并查集开销时间压缩的很低)