For loop 正确的时间复杂度
我遇到了这个问题,它要求找出时间的复杂性For loop 正确的时间复杂度,for-loop,time-complexity,big-o,complexity-theory,For Loop,Time Complexity,Big O,Complexity Theory,我遇到了这个问题,它要求找出时间的复杂性 int count = 0; for (int i = N; i > 0; i /= 2) { for (int j = 0; j < i; j++) { count += 1; } } int count=0; 对于(int i=N;i>0;i/=2){ 对于(int j=0;j
int count = 0;
for (int i = N; i > 0; i /= 2) {
for (int j = 0; j < i; j++) {
count += 1;
}
}
int count=0;
对于(int i=N;i>0;i/=2){
对于(int j=0;j
它说它的时间复杂度是O(n)
,应该是O(nlogn)
,因为第一个循环是logn
,第二个循环是n
它说它的时间复杂度是O(n),应该是O(nlogn)吗
第一个循环是logn,第二个是n
内环是基于外环的。所以,你的要求是无效的
并且,+=(加法赋值运算符)的复杂度为O(1)
对于外部循环的第一次迭代,内部循环将执行N次
对于外部循环的第二次迭代,内部循环将执行N/2次
等等
因此,总的执行步骤
= N + N/2 + ... + 1
//对数N乘以几何级数
~ N / (1-(1/2)) (Infinite GP Summation Formula) //though the series would go up to 1
~ 2N.
// ~ means approximately.
因此,代码的时间复杂度为O(N)
因此,给出的答案是正确的。您的问题是在1/2天前提出的。您也可以在那里查看。在本例中,与您的用户名相符:)