一、启发式合并
启发式合并多用于合并两个集合,现在有这样一个问题:
现在给定 \(n\) 个集合,第 \(i\) 个集合初始只有 \(\{i\}\),要支持集合的合并操作。
如果我们暴力合并,时间复杂度会是 \(O(n^2)\) 的。
参考并查集的按秩合并,考虑将小的集合合并到大的集合上。
考虑计算时间复杂度,容易发现 \(x+y \geq 2\min(x,y)\),所以集合大小可以是以更小的集合的大小的 \(2\) 倍增长的,所以每个元素至多被操作 \(\log n\) 次,总时间复杂度 \(O(n \log n)\)。