int foo(int n)
{
int sum = 0;
for(int k=1; k <= n; k = k * 2)
{
sum += k;
}
return sum;
}
我有以下功能。 现在,根据我的说法,foo(n)的运行时复杂度应该是big-o(logn)。 现在,我被要求找出foo的运行时间复杂度(n * n * n * n)。它应该是什么? 据我说,它应该是,只有big-o(logn)。 我说得对吗?
答案 0 :(得分:4)
问问自己,循环执行了多少次?当输入为n
时,为循环创建一个表:
for(int k=1; k <= n; k = k * 2)
Iteration | k
-------------+-----
1 | 1
2 | 2
3 | 4
... | ...
... | ...
k | n
2 k = n→k = log(n)
现在您要求输入n 4 。只需将表格更改为:
Iteration | k
-------------+-----
1 | 1
2 | 2
3 | 4
... | ...
... | ...
k | n^4
2 k = n 4 →k = log(n 4 )= 4 * log(n)
答案 1 :(得分:4)
是O(log n 4 )→O(4 log n)→O(log n)