请考虑以下代码:
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)以及我哪里出错了? 请帮忙。
答案 0 :(得分:1)
我们通常会谈论算法的复杂性,即输入大小(即它的长度二进制表示),而不是输入的实际数值。
因此,在这种情况下,输入大小为n = log(A)
,B
和C
的二进制表示分别为n / 2 = log(A) / 2 = log(A^(1/2)) = log(B)
和n / 4 = log(C)
。这给了我们(a)中的关系。