我试图了解以下每个示例的复杂性的细微差别。
示例 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 必须具有相同的复杂性,因为内循环执行的次数不取决于外循环。
这个对吗?