c++ - 寻找增长函数

标签 c++ time-complexity big-o

我试图找到给定代码的增长函数。

int sum = 0; 
 for (int k = n; k > 0; k /= 2)  {
    cout<<k<<endl;
    for (int i = 0; i < k; i++) 
    {
        sum++; 
        cout<<i<<endl;
    }
 }

但是我被困在了 (int k = n; k > 0; k/= 2) 的第一个循环中,它以这种方式执行:

for n = 5 , it executes 3 times
n = 10 , 4 times
n = 100 , 7 times
n = 1000 , 10 times

我如何概括它?

最佳答案

首先,10 大约是 log_2 of 1000。外循环大约有 log_2(n) 次迭代。但是,这并不能告诉您总步数,因为您在其中执行了可变数量的步数。

n + n/2 + n/4 + n/8 + ... = 2n = O(n)。您在循环内做的事情数量不变,因此总步数为 O(n)。当 k=n 时,大约一半的时间花在外循环的第一次迭代上。

关于c++ - 寻找增长函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197492/

相关文章:

c++ - C++中的无等待队列实现

c++ - 无需 root 即可加载共享库的更简单方法

C++ 在全局命名空间中找不到非标准 C 函数

c++ - 当我认为它不应该在 C++ 中时,正则表达式采用等号

java - Java 中素数算法的时间复杂度

time-complexity - O(n) 和 O(log n) 的乘积是多少?

algorithm - 从运行时分析中推导出时间复杂度

c - 调用另一个递归函数的递归函数的运行时分析

algorithm - 对带有修改的树路径的查询

algorithm - 这个函数的时间复杂度是O(1)吗?