算法复杂度 - 嵌套用于循环

时间:2017-04-06 11:55:54

标签: algorithm time-complexity code-complexity

for(j=n; j>1; j/=2)
  ++p;
for(k=1; k<p; k*=2)
    ++q;

在第一个代码示例中, p 变量属于 1st 循环。那么,即使它们不是嵌套循环, 2nd 也会返回 log(n)吗?我的意思是, O(loglog(n))

for(i=n; i>0; i--){
  for(j=1; j<n; j*=2){
    for(k=0; k<j; k++){
      //statements-O(1)
    }
  }
}

而这些,它们是嵌套的,但 k 变量属于 2nd 循环。那么,它应该与第一个相似吗?像 O(n ^ 2.log(n)) O(n.log ^ 2(n))

1 个答案:

答案 0 :(得分:3)

  1. 算法: 第一个循环需要log(n)时间。第二个循环占用log(log(n))时间。所以你有log(n)+ log(log(n))。但是第一个循环更重要。所以它是 O(log(n))

  2. 算法:首先看一下当你只分析两个外部for循环时的运行时(意味着n log(n))。但遗憾的是,循环内部的第三个变得更加复杂。

    第三个for循环从0到2 ^ m计数,其中m = log(n)。所以你必须将2 ^ m从0加到log(n)-1,即n-1。所以n-1是两个内部for循环的运行时间。现在你必须将它乘以外部for循环的线性运行时间。所以它是(n-1)n,它是n²-n。所以你有三个循环的 O(n²)