分治算法入门

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
版权声明:本文为博主原创文章,转载请附上博文链接!

 

转载于:https://www.cnblogs.com/zsben991126/p/10063677.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值