数据结构–并查集的进一步优化
Find操作的优化(压缩路径)
压缩路径 − − F i n d 操作,先找到根节点,再将查找路径上所有结点都挂到根结点下 \color{red}压缩路径 -- Find操作,先找到根节点,再将查找路径上所有结点都挂到根结点下 压缩路径−−Find操作,先找到根节点,再将查找路径上所有结点都挂到根结点下
int Find(int S[], int x)
{
return S[x] == x ? x : S[x] = Find(S, x);
}
每次Find操作,先找根,再“压缩路径”,可使树的高度不超过 O ( α ( n ) ) O(\alpha(n)) O(α(n))。 α ( n ) \alpha(n) α(n)是一个增长很缓慢的函数,对于常见的n值,通常 α ( n ) ≤ 4 \alpha(n)≤4 α(n)≤4,因此优化后并查集的Find、Union操作时间开销都很低