函数exe:log(n)中的运行时间是什么
int fun(int n) {
int count = 0;
for (int i = n; i > 0; i /= 2)
for (int j = 0; j < i; j++)
count += 1;
return count;
}
答案 0 :(得分:3)
不是O(log n),而是O(n)。您可以这样考虑:外循环的每次运行都会将其余数据(最初为n
)发送到内循环进行处理,然后将其删除一半。内循环在处理的数据中显然是线性的。
在第一次迭代中,外循环将整个n
发送到内循环,内循环“付” n
步骤来处理它。
在第二次迭代中,剩下n / 2
数据,因此innter循环为此支付了n / 2
;它总共支付了1.5n
。
在下一次迭代中,剩下n / 2 / 2 == n/4
数据,为此内部循环要多付n/4
,因此总计1.75n
。
依此类推,直到整个n
支付了两次,因此费用为2n
,即O(n),实际上甚至是ϴ(n)。
答案 1 :(得分:1)
复杂度为
O(n)
例如,假设我们取n = 32 因此,对于各种迭代,循环将运行的次数为 32,16,8,4,2,1
因此添加后将为63,这是循环运行的总次数 就是 2 * n-1
在数学上,对于任何G.P和的值,其级数类似于n,n / 2,n / 4,n / 8 ...... 1
假设我们再次取n = 32 然后
sum = a *(1-r ^ nof)/(1-r)= 32 *(1-(1/2)^ 5)/(1-(1/2))= 63
其中nof(外循环运行的次数)= 5为log2n,a = 32,r =(1/2)
对于任何数字,它将小于2 * n
答案 2 :(得分:0)
您的代码的时间复杂度仅为 O(n)。