浅谈启发式合并

浅谈启发式合并

本篇随笔简单浅谈一下启发式合并。


启发式合并的概念

顾名思义,启发式合并解决的是合并类的问题。

现在给一个最基本的合并问题。

我们要把\(N\)个集合,总共\(M\)个元素合并成一个大集合。

很容易得出,最坏的情况下需要合并\(N\)次,每次合并\(M\)个元素,也就是\(O(MN)\)的时间复杂度。

(一个集合有所有元素,然后傻呵的一直把这个最大的往空集里合并,合并了\(N\)次)

然后我们想,这种合并策略山P就山P在把最大的往小的里合并。

同样的问题,如果我们把小的往大的里合,是不是就快很多?

看看这个思路,是不是很像拍脑门临时得出来的?

是不是很受启发?

好了,它就叫启发式合并。

其思路是:每次把较小集合往较大集合里合并。

其原理是,因为是较小集合往较大集合里合,于是较小集合的元素个数被扩充了至少一倍,也就是变成了原来的二倍多,这样的话,我们就能保证,最坏的合并次数是\(O(\log N)\)


启发式合并的应用

在刚刚讲过的概念中,我们可以得知启发式合并是对数据结构的一种合并,比如多棵树、集合、线性数据结构等等。

当然我们最常见的还是并查集的启发式合并优化。

在此不过多赘述,具体的应用请读者通过具体题目自行体会。

posted @ 2020-09-11 19:51  Seaway-Fu  阅读(1502)  评论(1编辑  收藏  举报