分治法的递归算法时间复杂度分析

最近看分治法,那我们就一起研究下分治法的时间复杂度吧。

分治法是将问题分解为语言问题等价的规模相等的子问题进行求解的过程。因此根据定义可知,如果原问题为A该问题被分解为K个子问题,则子问题应该为A/k。同时当子问题被解决之后,对子问题还应该有一个合并的过程,让子问题被重新归纳为原问题。规范的描述过程应该是:

1、原问题为A

2、划分子问题A/k

3、解决子问题

4、归并子问题

设解决子问题被解决需要的时间复杂度为O(1),归并规模为n的子问题需要的时间复杂度为f(n),则该过程的时间复杂度应该可以使用递归公式T(A) = T(A/k) + f(n)

T(A) - kT(A/k) = f(A)          (1)式
T(A/k) - kT(A/k*k) = f(A/2) (2)式

(1)式 + k(2)式 可得:
 T(A) + k*k*T(A/k*K) = f(A) + k*f(A/2)


重复该过程可知: T(A) -  power(K,logk A) * T(1) = [1,k,k*k,...... power(K,logk A)-1]*([f(A), f(A/k),......f(A/power(K,logk A)-1]的转置矩阵)

因为设f(A) = O(A)则K* f(A/k) = k * O(A/k) = O(A)

T(A) =  A * T(1)  + (logk A)O(A)

将T(1)得复杂度代入即可得到具体的总体时间复杂度值。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值