标签:今天 循环 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)。
标签:今天 循环 group tgt hellip nlog enc 操作 col
原文地址:https://www.cnblogs.com/MrZhaoyx/p/13038678.html