zoukankan      html  css  js  c++  java
  • 浅谈启发式合并

    浅谈启发式合并

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


    启发式合并的概念

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

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

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

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

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

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

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

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

    是不是很受启发?

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

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

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


    启发式合并的应用

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

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

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

  • 相关阅读:
    HDU 4920 Matrix multiplication
    UVALive 5545 Glass Beads
    POJ 2230 Watchcow
    hdu 1878 欧拉回路
    hdu 3018 Ant Trip
    2015 Multi-University Training Contest 1 hdu 5296 Annoying problem
    深入理解php内核 编写扩展 I:介绍PHP和Zend
    PHP数组实际占用内存大小的分析
    深入理解php底层:php生命周期
    PHP实现的进度条效果详解
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13653748.html
Copyright © 2011-2022 走看看