一个简单for循环的时间复杂度

Posted mrzhaoyx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单for循环的时间复杂度相关的知识,希望对你有一定的参考价值。

  今天看到有这样一个循环

int count = 0;
for (int i = N; i > 0; i /= 2) {
    for (int j = 0; j < i; j++) {
        count += 1;
    }
}

  有人认为这个循环的时间复杂度应该是O(nlogn),但这是错的。

  他认为,外层循环的时间复杂度是O(nlogn),内层循环的时间复杂度是n,所以整个循环的复杂度是O(nlogn),他错误所在就是认为内部循环是循环全部数据,但实际上是内部循环的次数在外部循环执行后会减半。

  但正确的答案是O(n),让我们来算一下。外部循环从N开始,每次减半,这意味着第一轮是N,第二轮是N/2,第三轮是N/4,以此类推。所以我们有N + N/2 + N/4 + N/8…总共是2N个操作,由此可得复杂度是o(N)。

以上是关于一个简单for循环的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

一个简单for循环的时间复杂度

一个简单for循环的时间复杂度

简单循环时间复杂度内的递归函数

创建自己的代码片段(CodeSnippet)

以下代码片段的算法复杂度

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始