我有这段代码,我想找到它的时间复杂性。我正准备接受采访,我觉得这个很难。
int foo (int n)
{
int sum = 0;
int k, i, j;
int t = 2;
for (i=n/2; i>0; i/=2)
{
for(j=0; j<i; j++)
{
for(k=0; k<log2(t-1); k++)
{
sum += bar(sum);
// bar time-complexity for all inputs is O(1)
}
}
t = pow(2, i);
}
}
我不知道为什么但是我无法限制这个表达并发现复杂性。
有关如何解决此问题的任何帮助?
答案 0 :(得分:3)
让我们把它写成:
< n * [log(2^i)/(2^i) for i in range 1...n] .
= n * [log(2)/2 + log(4)/4 + log(8)/8 + ... + log(n)/n)]
O(n)
这是=MAX(INDEX(('Charlie'!A4:A100=D4)*('Charlie'!B4:G100>0)*'Charlie'!B4:G100,))
答案 1 :(得分:3)
由于您没有显示任何进展,我会给您提供顶级提示:
j
循环多少总次?n
的样本值,例如32.对于i
的每个值,执行sum +=
语句的次数是多少?你能否根据n
?