📅  最后修改于: 2023-12-03 14:57:47.969000             🧑  作者: Mango
GATE CS 1998
在下面的C函数中,for循环的求解次数是多少?
int fun(int n) {
int i, j;
for (i = n; i > 1; i = i / 2) {
for (j = 0; j < i; j++) {
// some O(1) operations
}
}
}
对于给定的参数n,循环的求解次数为$O(nlogn)$。
外循环的求解次数是$log_2{n}$, 因为i是每次除以2的,我们可以这样来看:
内循环是墨菲定律的常见形式,因此我们需要考虑两个循环的执行次数。
因此,总的操作次数是:
$=j+n + j+\frac{n}{2} + j+\frac{n}{4} + j+\frac{n}{8}$ $+\cdots$
$=n(1 + \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \cdots )$ $ + j(1 + \frac{1}{2} + \frac{1}{4} + \frac{1}{8} + \cdots )$
$=\frac{n}{1-\frac{1}{2}} O(1) $
$= O(n).$
因此,我们可以得出这个函数的时间复杂度为 $O(nlogn)$。
**注意:**由于本题并未提供输出,上述分析仅供参考。