使用master公式计算递归问题的时间复杂度

递归的时间复杂度

子问题规模相同——master公式

子问题的问题规模相同时,我们就可以使用master公式来估算该递归问题的时间复杂度。

在这里插入图片描述
以我们的二分法求最大值(图文详解递归:二分法求数组中的最大值)为例,函数代码具体如下,该函数的两个子问题规模相同。

int process(int* a,int L,int R){
    if(L == R)
       return *(a+L);
    int mid = L+((R-L)/2);//计算中点
    int Leftmax =  process(a,L,mid);
    int Rightmax = process(a,mid+1,R);
    return (Leftmax>Rightmax)?Leftmax:Rightmax;
}
  1. master的等式左侧:即母函数,N为该函数的总数据量。

  2. master的等式右侧第一项:我们将用于求解的Leftmax = process(a,L,mid);rightmax = process(a,mid+1,R);分别视作一个子问题,也就是说在该函数中由两个子递归,所以a=2。而我们两个子递归将数据量分为两部分,故b=2。

  3. master等式右侧第二项:除了调用以外的行为的时间复杂度,在该函数中除调用以外的行为为一个if判断、计算mid和return返回值,这三个行为的时间复杂度都是常数级的,它与我们的数据量N无关,所以d=0。

那么我们上述给出的程序的时间复杂度使用master公式求解,则结果如下:

在这里插入图片描述
将a,b,d的值代入,因为log2 =1 > 0根据以上公式我们可以计算得出
在这里插入图片描述也就是说我们上述给出的算法时间复杂度为在这里插入图片描述
将a=2 b=2带入得O(n)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值