此问题基于此资源http://algs4.cs.princeton.edu/14analysis。
有人可以分解为什么练习6字母b是线性的吗?外环似乎每次增加2倍,所以我认为它是对数...
从链接:
int sum = 0;
for (int n = N; n > 0; n /= 2)
for (int i = 0; i < n; i++)
sum++;
答案 0 :(得分:3)
这是一个几何系列。
内循环每次迭代外循环运行i
次迭代,外循环每次减少一半。
所以,总结起来会给你:
n + n/2 + n/4 + ... + 1
这是geometric series,r=1/2
和a=n
- 收敛到a/(1-r)=n/(1/2)=2n
,所以:
T(n) <= 2n
由于2n
位于O(n)
- 算法以线性时间运行。
这是一个完美的例子,可以看出复杂性不是通过乘以每个嵌套循环的复杂性(可能会得到O(nlogn)
),而是通过实际分析需要多少次迭代来实现。
答案 1 :(得分:0)
是的,很简单 看到n的值每次减少一半,我运行n次。
所以我第一次从1变为n 下次0到n / 2 因此在第k个术语上为0到n / k。
现在内部循环的总时间将运行= Log(n)
所以我的GP是我运行的次数。 用条款
n,n/2,n/4,n/8....0
所以我们可以找到GP的总和
2^(long(n) +1)-1 / (2-1)
2^(long(n)+1) = n
hence n-1/(1) = >O(n)