【发布时间】:2020-06-06 20:25:20
【问题描述】:
我有这个代码:
int count = 0;
for (int i = N; i > 0; i /= 2) {
for (int j = 0; j < i; j++) {
count += 1;
}
}
它的时间复杂度是 O(n),我已经明白为什么了,但我不明白为什么他们从分析代码:
n(1 + 1/2 + 1/4 + 1/8 + …)
内括号可以看作是log(n),所以它不是n(log(n))? (只考虑表达式,不考虑算法)。
例如,我正在分析埃拉托色尼筛法,我得到了类似的表达式:
n/2 + n/3 + n/5 + n/7 + … = n(1/2 + 1/3 + 1/5 +…)
所以括号里面的内容可以看成是loglogn,加上外面的n,最后就是:nloglogn
两者有什么区别:
n(1 + 1/2 + 1/4 + 1/8 + …)
到这里O(nloglogn)
从这里出发:
n(1/2 + 1/3 + 1/5 +…)
O(n)?
【问题讨论】:
标签: algorithm time-complexity sieve-of-eratosthenes