【发布时间】:2013-09-22 19:06:55
【问题描述】:
我试图了解复杂性的细微差别 下面的每个例子。
示例 A
int sum = 0;
for (int i = 1; i < N; i *= 2)
for (int j = 0; j < N; j++)
sum++;
我的分析:
第一个 for 循环执行 lg n 次。
内循环独立于外循环,每次外循环执行N次。
所以复杂度一定是:
n+n+n...lg n次
因此复杂度为n lg n。
这是正确的吗?
示例 B
int sum = 0;
for (int i = 1; i < N; i *= 2)
for(int j = 0; j < i; j++)
sum++;
我的分析:
第一个 for 循环执行 lg n 次。
内循环的执行依赖于外循环。
那么当内循环的执行次数取决于外循环时,我该如何计算复杂度呢?
示例 C
int sum = 0;
for (int n = N; n > 0; n /= 2)
for (int i = 0; i < n; i++)
sum++;
我认为示例 C 和示例 B 必须具有相同的复杂性,因为内循环执行的次数不取决于外循环。
这是正确的吗?
【问题讨论】:
标签: c algorithm time-complexity