查找运行三个循环的代码的时间复杂度

时间:2017-07-28 21:36:18

标签: c algorithm time-complexity

我有这段代码,我想找到它的时间复杂性。我正准备接受采访,我觉得这个很难。

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);
    }
}

我不知道为什么但是我无法限制这个表达并发现复杂性。

有关如何解决此问题的任何帮助?

2 个答案:

答案 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)] 

enter image description here

O(n)

这是=MAX(INDEX(('Charlie'!A4:A100=D4)*('Charlie'!B4:G100>0)*'Cha‌​rlie'!B4:G100,))

答案 1 :(得分:3)

由于您没有显示任何进展,我会给您提供顶级提示:

  • 让log_t = log2(t)。什么是log_t作为i的函数?
  • 请注意,外循环执行log2(n)次。
  • 执行j循环多少次?
  • 选择n的样本值,例如32.对于i的每个值,执行sum +=语句的次数是多少?你能否根据n
  • 概括一个等式