如何计算递推式的效率--引例合并排序

首先认识一个递推式:

T(n) = aT(n/b)+f(n)     (1.0)

这就是通用分治递推式了,其中

T(n)表示算法的运行时间,这样aT(n/b)就不难理解为把规模为n的实例划分b个规模为n/b的实例,其中有a个需要求解的实例,f(n)表示将分解的结果合并起来所消耗的时间,听起来拗口的话,那就先看个实例先吧.

为了方面后面的求解,我们先了解一下下面的定理先吧,具体证明过程就略过啦,以后有机会再补上。

主定理 :如果在式(1.0)f(n)O(nd),其中d0,那么:

当a《bd时,T(n)=O(nd) ; a=bd时,T(n)=O(ndlogn) ;a>bdT(n)=O(nlogba).

合并排序情景分析:

当n>1时,C(n) = 2C(n/2)+Cm(n) ,C(1) = 0;

C(n)就是要求的时间效率,2C(n/2)表示把原问题分解成两个子问题(b=2),这两个子问题都要求解(a=2),Cm(n)就是要把左右两个有序序列合并的效率(f(n)).

在最坏的情况下,Cm(n) = n-1.

根据主定理,由d=1,a=2,b=2,可以得出T(n) = O(nlogn)。 

 

 

 

 

转载于:https://my.oschina.net/daxia/blog/91577

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值