如何找到这个功能的复杂性?

时间:2016-05-27 17:28:05

标签: algorithm time-complexity

我有log n但它不是log n它是log(log n)
但是为什么?


int function(int n){
  return aux(n , 2)
}

int aux(int n, int x){
  while (n<x) {
    x *= x;
  }
  return x;  
}

功能的复杂性是什么?

1 个答案:

答案 0 :(得分:1)

非常确定循环条件应该是n > x所以我将在这个答案中假设它。

首先,观察x

的值
x1 = x0 * x0
   = 2 * 2
   = 2^2
x2 = x1 * x1 
   = x0 * x0 * x0 * x0
   = 2 * 2 * 2 * 2
   = 2^4
x3 = x2 * x2
   = x1 * x1 * x1 * x1 
   = x0 * x0 * x0 * x0 * x0 * x0 * x0 * x0
   = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
   = 2^8

我们看到指数正在增长为2^t,其中t是循环中的迭代次数,因此我们可以获得x的闭式表达式:

x = 2^(2^t)

然后我们可以求解迭代次数t

n > x
=> n > 2^(2^t)
=> log(n) > 2^t
=> log(log(n)) > t

根据要求。