一个简单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循环的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章