首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找运行三个循环的代码的时间复杂度。

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

Stack Overflow用户
提问于 2017-07-28 21:36:17
回答 2查看 145关注 0票数 4

我有这段代码,我想找出它的时间复杂性。我正在为面试做准备,我认为这次面试有点困难。

代码语言:javascript
复制
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);
    }
}

我不知道为什么,但我无法绑定这个表达式,并发现一个复杂的。

对如何解决这个问题有什么帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2017-07-28 21:42:00

让我们把它写下来如下:

代码语言:javascript
复制
(n/2)*log(1) + (n/4)*log(3) + ... + 1*(log(n-1)). Which is equal to:

代码语言:javascript
复制
< 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)

票数 3
EN

Stack Overflow用户

发布于 2017-07-29 01:09:07

既然你没有表现出任何进步,我就给你一个最高级的提示:

  • 设log_t = log2(t).log_t作为i的函数是什么?
  • 注意,外部循环被执行log2(n)次。
  • 执行j循环的总次数是多少?
  • 选择n的示例值,例如32。对于i的每个值,执行sum +=语句多少次?你能基于n推广这方面的方程式吗?
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45382762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档