如何计算以下算法的时间复杂度

时间:2013-09-06 17:13:22

标签: algorithm data-structures analytics time-complexity

如何计算以下算法的时间复杂度。我尝试但是因为递归调用而感到困惑。

power (real x, positive integer n)
//comment : This algorithm returns xn, taking x and n as input
{
    if n=1 then
    return x;
    y = power(x, |n/2|)
    if n id odd then
    return y*y*x //comment : returning the product of y2 and x
    else
    return y * y //comment : returning y2
}

可以通过简单的步骤解释一下。

2 个答案:

答案 0 :(得分:1)

要计算递归函数的时间复杂度,您需要计算将根据某个输入变量N进行的递归调用的数量。

在这种情况下,每次调用最多只能进行一次递归调用。调用次数为O(log 2 N),因为每次调用都会使N减少一半。

递归函数的其余部分是O(1),因为它不依赖于N。因此,您的函数的时间复杂度为O(log 2 N)。

答案 1 :(得分:0)

每次调用被认为是一个恒定时间操作,它将递归多少次等于n = 1之前你能做多少次n / 2,这最多是log 2 n次。因此,最坏的情况是运行时间为O(log 2 n)。