三个嵌套循环的大 O 复杂性,最后一个循环在 if 语句中
Big O complexity of three nested loops with the last loop in an if statement
假设我们有以下代码块:
sum = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(i == j)
for(k = 0; k < n; k++)
sum++;
在我正在阅读的书中,复杂性是 O(n^2),准确地说是 thetha (n^2),但我不确定为什么。当我自己计算时,我得到 O(n^3):
- 外层循环复杂度为 O(n)
- 通过遵循嵌套循环规则,在第二个循环中复杂度达到 O(n^2)
- if 语句会为真 n 次,所以到第三个循环时,复杂度将为 O(n*n^2)
- sum++ 语句需要常数时间,所以复杂度保持在 O(n^3)
这是我的逻辑,但它似乎有缺陷。 O(n^2) 复杂度的原因是什么?
第二个循环运行 n
个步骤。除一个步骤外,每个步骤只需要常数时间(评估 if 语句)。第 i
步需要 O(n)
因为执行了第三个循环。所以第二个循环总共需要2n = O(n)
。所以你总共得到 O(n^2)
.
假设我们有以下代码块:
sum = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(i == j)
for(k = 0; k < n; k++)
sum++;
在我正在阅读的书中,复杂性是 O(n^2),准确地说是 thetha (n^2),但我不确定为什么。当我自己计算时,我得到 O(n^3):
- 外层循环复杂度为 O(n)
- 通过遵循嵌套循环规则,在第二个循环中复杂度达到 O(n^2)
- if 语句会为真 n 次,所以到第三个循环时,复杂度将为 O(n*n^2)
- sum++ 语句需要常数时间,所以复杂度保持在 O(n^3)
这是我的逻辑,但它似乎有缺陷。 O(n^2) 复杂度的原因是什么?
第二个循环运行 n
个步骤。除一个步骤外,每个步骤只需要常数时间(评估 if 语句)。第 i
步需要 O(n)
因为执行了第三个循环。所以第二个循环总共需要2n = O(n)
。所以你总共得到 O(n^2)
.