具有时间复杂度的嵌套循环log(log n)

时间:2019-12-21 18:04:23

标签: time-complexity complexity-theory

是否有一个具有两个循环(嵌套)的算法,使得总时间复杂度为O(log(log n))

这是在解决以下问题之后出现的:

/etc/letsencrypte/renewal/example.com.conf

以上代码的时间复杂度为N。(使用“几何级数”的概念)。是否可以存在时间复杂度为O(log(log n))的类似循环?

1 个答案:

答案 0 :(得分:3)

要使一个循环迭代O(log log n )次,其中循环索引变量的计数最多为 n ,则索引变量必须像逆变量一样增长日志 k 的函数,其中 k 是迭代次数;即它必须增长到2 ^ 2 ^ k 或2以外的其他基数。

实现此目的的一种方法是从2开始并反复平方直到达到 n -如果索引变量为(((2 ^ 2)^ 2)... ^ 2) k 平方,则根据需要等于2 ^ 2 ^ k

for(int i = 2; i < n; i = i*i) {
    //...
}

此循环根据需要迭代O(log log n )次。如果绝对必须使用嵌套循环,则可以添加一个额外的循环,该循环迭代O(1)次,使迭代总数渐近相同:

for(int i = 2; i < n; i = i*i) {
    for(int j = 0; j < 10; j++) {
        // ...
    }
}