algorithm - 找出算法的时间复杂度?

标签 algorithm

我认为是 log(logn) 因为循环重复 log(logn) 次...

j=1;
i=2;
while (i <= n) do {
    B[j] = A[i];
    j = j + 1;
    i = i * i;
}

最佳答案

你是对的,它是 O(lg(lg n)) 其中 lg 代表以 2 为底的对数。

原因是 i 的值序列服从规则 i = prev(i) * prev(i),结果是 2 , 2^2, 2^4, 2^8, ... 对于步骤 1, 2, 3, 4, ... 换句话说, k 之后的 i 的值 迭代是 2^{2^k}

因此,循环将在 2^{2^k} > nk > lg(lg(n)) 时停止(只需取 lg 两次到不等式的两边。不等式仍然有效,因为 lg 是递增函数。)

关于algorithm - 找出算法的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28649003/

相关文章:

algorithm - 检查 A 是否是二叉树 B 的一部分

java - 确定我们是否可以通过混合列表中的颜色来获得目标颜色

python - 各种列表连接方法及其性能

c++ - Median of Medians 算法误解的中位数?

algorithm - 如何使用 BFS 按顺序获取包含某些给定节点的路径?

javascript - 计算数字数组的总数,忽略重叠数

ruby-on-rails - 使用 Rails 的单场淘汰赛

algorithm - 具有平行边的有向图的最小权重生成树

c++ - 在 c++ 中的不同行或列旁边搜索最小值和最大值的最快方法是什么

algorithm - TOTP 算法是否依赖于始终正确同步的客户端时间?