启发式合并是对集合合并类问题的一种高效处理方式。
• 通常启发式合并优化的是合并多个相同数据结构的时间,通过暴力的合并来
将两个相同的数据结构合并,从而使得维护的零散信息(性质)逐渐合一。
• 举个十分简单的例子:起初有 n 个数组,且每个数组有且仅有 1 个数,接下
来有 n-1 个指令,需要你每次合并两个指定数组(将其中一个数组中的数一
个一个插入另一个数组)。使插入操作的次数最少。
• 最坏需要插入 nlogn次。做法:每次合并两个数组时,首先比较两个数组的
大小,将小数组中的数暴力插入大数组中就可以了。
• 证明:对于每一个数,考虑何时会对其进行插入操作。显然是它所在的集合
大小比另一个集合小的时候。也就是说,在每次它被进行插入操作的合并指
令后,它所在的集合大小会翻至少一倍,那么显然最多翻 logn 次啊。所以这
样合并集合的时间复杂度是 nlogn 的。
一些题目: