【发布时间】:2013-09-26 18:19:42
【问题描述】:
问题
计算这个算法的复杂度:
for(i=n; i>1;i=i/2)
for(j=i;j<n;j++){
statement;
}
我之前在这个话题上做了什么:
第一个循环运行 logn 次。 第二个循环运行 n-i 次, i 从 n 开始,并在每次外循环迭代中更改为 i/2。所以内部循环是这样运行的:
n-n 0 times
n - n/2 n/2 times
n - n/4 3n/4 times
n - n/8 7n/8 times
n - n/16 15n/16 times
以此类推直到
n - 1次
所以总称是n * ((2^n)-1)/(2^n)
现在这个序列既不是算术也不是几何。所以n/2 * (a+l)的公式不能应用在它上面。我该如何进一步处理这个解决方案,或者如果它是错误的,那么正确的方法是什么。
注意:如果应用n/2*(a+l),则生成的复杂度为-n/(2^n) = O(2^n).
【问题讨论】:
-
没有x。你是说 O(x) 吗?
-
随着
n变大,通用术语接近n。也许这是一个解决方案。 -
否
x我的意思是阅读链接的问题并尝试这样:A puzzle related to nested loops
标签: java algorithm complexity-theory