给定程序的递归关系

时间:2014-10-29 11:55:06

标签: algorithm time-complexity

请考虑以下代码:

def f(int A):
     if A<256 :
         return A^(1/2)
     B = A^(1/2)
     C = B^(1/2)
     return (f(B)+f(C))mod 16
设p(n)表示该算法的时间复杂度。时间复杂性是:

a) T(n) = T(n/2) + T(n/4) + O(1)
b) T(n) = T(n^(1/2)) + T(n^(1/4)) +O(1)

据我所知,答案应该是(b),但它是(a)。任何人都可以解释我为什么答案a)以及我哪里出错了? 请帮忙。

1 个答案:

答案 0 :(得分:1)

我们通常会谈论算法的复杂性,即输入大小(即它的长度二进制表示),而不是输入的实际数值。

因此,在这种情况下,输入大小为n = log(A)BC的二进制表示分别为n / 2 = log(A) / 2 = log(A^(1/2)) = log(B)n / 4 = log(C)。这给了我们(a)中的关系。