这个power函数的复杂度是多少?

问题描述

是找到给定数字幂的算法。递归后的语句将如何影响复杂性?

int power(int b,int n){
 if (n == 0)
    return 1;
 else {
    int p = power(b,n/2);
    if (n % 2 == 0) 
        return p * p;
    else 
        return b * p * p;
 }
}

解决方法

因此,您在每一步都用n除以2,该算法一直运行到n达到0为止。我们可以看到发生了什么:

n1 = n / 2
n2 = n1 / 2 = (n / 2) / 2 = n / 4 = n / (2^2)
n3 = n2 / 2 = n / 8 = n / (2^3)
...
...

它的运行时间为n >= (2^x),其中x是任何非负整数。

因此,我们可以说,当2^x > n停止时(其中x2^x > n的最小可能整数)。

现在,我们可以写

2^k = n,// where k is a non-negative integer
or,lg(2^k) = lg(n) // here,'lg' means 2-based log
or,k = lg(n)

因此,x(for which it stops running)的最小可能值为k + e,where e is a very small number,但是,当然,我们正在考虑integer here(cause,no of steps)。因此,我们可以只写x = k + 1

因此,算法运行的步数为x(考虑到乘法的复杂度常数),等于k + 1lg(n) + 1

因此,它是O(lg(n) + 1),或者我们可以说是O(lg(n))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...