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

标签 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;  
}

函数的复杂度是多少?

最佳答案

很确定循环条件应该是 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

根据需要。

关于algorithm - 如何找到这个功能的复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489252/

相关文章:

arrays - 从数组中删除元素的复杂度是多少?

algorithm - 树中的回文

java - 计算房间数量的洪水填充算法

c# - 在树中搜索算法

python - 衡量 python 脚本复杂性的问题

python - 如何加快 numpy.append 速度

algorithm - T(n) = T(n-1) + O(n * n!) 的渐近复杂度是多少?

algorithm - while 循环的复杂度是多少?

c - 查找不超过给定值 n 的素数的优化方法

c - sleep() 背后的算法是什么?