码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-06-03 17:25:08      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:今天   循环   group   tgt   hellip   nlog   enc   操作   col   

  今天看到有这样一个循环

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循环的时间复杂度

标签:今天   循环   group   tgt   hellip   nlog   enc   操作   col   

原文地址:https://www.cnblogs.com/MrZhaoyx/p/13038678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!