algorithm - 循环迭代分析

标签 algorithm big-o analysis

请参阅下面的解决方案,我想要一些建设性的反馈。

下面的 O(n) 运行时间是多少。

int a = 0;
int k = n*n*n; //n^3
while(k > 1) 
{
  for (int j=0; j<k; j++) //runs from 0->k
  { a--; }
k = k/2; //divides by 2 each iteration
}

每次 for 循环运行时,它都会给出一个常数 x k。

= 0xn^3 + 1x (n^3/2) + 2x(n^3/4) +...+ nx(n^3/2^n)
= n^3 (0 + 1/2 + 2/4 +...+ n/2^n) <- 有人知道我如何进一步简化它吗?

编辑:我假设我们会以某种方式使用算术级数......

最佳答案

让我们先使用 k

在第一个 while 循环中,for 循环运行 k 次

在第二个 while 循环中,for 循环运行 k/2 次

在第三个 while 循环中,for 循环运行 k/4 次

...

因此总共运行 ( k + k/2 + k/4 + k/8 + ... + 1) 次

提取k后,为k * ( 1 + 1/2 + 1/4 + 1/8 + ... + 1/k)

随着k的增加,括号内的部分变成2,我们可以忽略

将k改为n^3,结果为O(n^3)

关于algorithm - 循环迭代分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112137/

相关文章:

algorithm - 提出这个问题最阴险的方法是什么?

language-agnostic - 您使用哪些工具来分析文本?

string - 包含字符列表的所有固定长度子串(子集的任意 1 个排列)的最短字符串

c# - 如何在 C# 中的 datagridview 中找到最接近的值?

algorithm - 使用迭代法求复杂度 T(n) = 4T(n/2) + (n^2)*logn

c++ - 时间复杂度困惑的下限

algorithm - 如何根据以下代码计算 Big-O Notation

javascript - 模板和占位符算法

algorithm - 滑动窗口算法实现

.net 程序集的静态分析