c++ - 当怀疑 n log n 时,运行时复杂度呈线性

标签 c++ time-complexity

无法理解为什么此代码片段的时间复杂度为 O(n)

int main() {
  int n = 10; //n can be anything
  int sum = 0;
  float pie = 3.14;
  int var = 1;

  while (var < n){
    cout << pie << endl;
    for (int j=0; j<var; j++)
      sum+=1;
    var*=2;  
  }
  cout<<sum;
}

var 的二等分意味着 log(n),然后有一个嵌套的内部循环,显然有 2n 使得整体复杂度为 O(n)。但我不明白为什么 2n。

最佳答案

考虑 n 是 2 的幂时的情况可能会有所帮助:n = 2^m。那么代码中的迭代次数(方便地也是它计算的次数)是

1 + 2 + ... + 2^(m-1) =
2^m-1 <
n =
O(n)

关于c++ - 当怀疑 n log n 时,运行时复杂度呈线性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68919340/

相关文章:

algorithm - 我怎样才能找到这个代码段的复杂度?

java - 时间复杂度 : why O(nlogn)?

C++:对 'FMOD::X' 的 undefined reference

c++ - 多态数据存储的替代方案

c++ - 多态性中基类缺少虚拟析构函数 = 资源泄漏?

algorithm - 仅使用两个不同键快速排序 N 项数组时的最大函数调用堆栈大小是多少

algorithm - 时间复杂度单循环与多顺序循环

c++ - 调试 libpng-1.2.46-2 Fedora Core 16 -- .PNG 前 8 位未通过 libpng

c++ - opencv c和c++接口(interface)转换表

java - 算法分析——数学模型