简介
启发式合并本质上是一种优化的暴力,可用于拥有稳定结构的数据结构。
实现思路
显然的暴力思路是用链表维护每种颜色的位置,然后每次修改的时候暴力合并两条链。
不难证明,这样的最坏时间复杂度将达到(O(n^2)),不能接受。
可以观察到,合并的时间复杂度只与被合并的链长度有关,所以可以想到优化合并的过程。
自然地,我们选择每次合并的时候判断两边的大小,将小的合并到大的上面去。
由于最多只能进行(logn)次合并,每次合并最坏为(O(n)),所以时间复杂度为(O(nlogn)),均摊复杂度为(O(logn))。