• 分治算法入门


    https://blog.csdn.net/rainchxy/article/details/78957851可以看这篇博客

    分治的复杂度分析:对于规模为n的问题,将其分成a个子问题,每个问题的规模是n/b。

    证明:在递推式中每次往下分治时,子问题数量都会乘以a,子问题规模都会除以b,那么当子问题规模到达1时,子问题数量就是a^logb(n)、即n^logb(a)

    f(n)是子问题向上合并的代价,每次往下分治时,merge的代价是其问题数量*合并当前规模的问题的代价,当分治到问题规模是1时,向上合并的代价就是a^logb(n)-1 + ... + af(n/b) + f(n),

     

    有上述推导式可以得知分治算法的复杂度只看两个因子,一是n^logb(a),二是sum{ aj * f(n/bj) },0<=j<=logb(n)-1,用等比数列的级数求和算出最终复杂度即可

    对应如下递归树

    casr1: 当f(n)<O(n^logb(a))时,假设f(n)=O(n^(logb(a)-e)),e>0,

    递归树的每层成本从根向下呈几何级数增长,成本在叶节点一层达到最高,即最后一次递归是整个过程中成本最高的一次,故其占主导地位。所以递归分治的总成本在渐进趋势上和叶子层的成本一样。 此情况下分治代价由树的叶子节点代价决定

    case 2:当f(n)=O(n^logb(a))时,假设f(n)=O(n^logb(a))

    递归树每层的成本在渐进趋势上一样,此情况下分治代价均匀分布在树的各层上

    case 3:f(n)>O(n^logb(a)),

    递归树每层成本呈几何级数递减,树根一层的成本占主导地位。因此,总成本就是树根层的成本。分治代价集中在根的代价上

    特别说明:
    f(n)f(n)代表的是分治中的划分和合并的成本。由于f(n)f(n)的渐进增长趋势>Θ(nlogba)>Θ(nlogba),
    所以该分治的划分和合并的成本高于子问题的解决成本。而如果在这种情况要获得解,划分和合并的成本应该逐级下降
    否则,划分和合并成本随着划分的推进将呈现发散趋势,这样总成本有可能不会收敛。那么这种分治就显得没有意义了
    而如果划分与合并成本逐级下降,则意味着函数ff满足af(n/b)<=cf(n), c<1af(n/b)<=cf(n), c<1。
    因此,解为T(n)=Θ(f(n))
    ---------------------
    作者:TaoSama
    来源:CSDN
    原文:https://blog.csdn.net/lwt36/article/details/50625573
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    作业:ATM
    软件开发目录规范
    re模块
    logging模块
    ConfigParser模块&hashlib模块&subprocess模块
    json模块&pickle模块&shelve模块&xml模块
    时间模块time&datetime
    vue里面render详细写法
    node.js创建服务
    vue退出功能的实现
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10063677.html
Copyright © 2020-2023  润新知