渐近时间复杂度O(sqrt(n)log(n)n)

时间:2018-08-21 16:05:28

标签: algorithm big-o asymptotic-complexity

for(int i=1; i*i <= n; i = i+1) {
   for(int j = n; j >= 1; j/4)   {
      for(int k = 1; k <= j; k=k+1) {
         f();
      }
   }
}

为什么此函数O(n^{3/2})的渐近复杂性?我认为应该是O(sqrt(n)log(n)n)O(sqrt(n)n)是否相同?然后就是O(n^{3/2}) ..

  • 外循环为O(sqrt(n))
  • 第一个内部循环是O(log(n))
  • 第二个内部循环为O(n)

1 个答案:

答案 0 :(得分:0)

外部两个循环(在ij上的边界取决于n,但是内部循环(在k上)的边界由{{1 }},而不是j

请注意,内部循环迭代n次;假设jf(),则内部循环的成本为O(1)

尽管中间循环(遍历O(j))迭代了j次,但O(log n)的实际值是一个geometric series,以j开头。由于此几何级数(n)总计为n + n/4 + n/16 + ...,因此中间循环的成本为4/3*n

由于外部循环迭代O(n)次,因此总费用为sqrt(n)