void find (int n) {
if (n < 2) return;
else {
sum = 0;
for (i = 1; i <= 4; i++) find(n / 2);
for (i = 1; i <= n*n; i++)
sum = sum +1;
}
}
假设除法运算需要恒定时间,sum
是一个全局变量。 find(n)
的时间复杂度是什么?
据我说:首先是循环运行4 log n
次,第二次循环运行n^2
次。
所以总时间复杂度= O(4 log n + n^2) = O(n^2)
。
答案 0 :(得分:4)
T(n) = 4 * T(n/2) + O(n^2)
a = 4, b = 2, f(n) = n^2
f(n) = O(n^c log^k(n)) , c = 2, k = 0
logb(a) = log2(4) = 2, c = logb(a)
T(n) = Theta(n^(logb(a))log^(k+1)n) = Theta(n^2*log^1(n)) = Theta(n^2*log(n))
答案 1 :(得分:1)
每次调用自身时,第一个循环都会执行O(log(n))次。 返回后,每次调用都将调用一个O(n ^ 2)循环。
因此,O(n^2 log(n))
答案 2 :(得分:0)
你是对的。 n^2 + (n/2)^2 + (n/4)^2 + ..
在O(n ^ 2)中,因为它小于2 *(n ^ 2)。您可以用较大的方块填充所有较小的方块。
即使将O(n)作为最后一个循环,这也会成立。
例如
for (i = 1; i <= 4; i++) find(n / 2);
for (i = 1; i <= n; i++)
sum = sum +1;
具有O(n)的复杂性