算法的时间复杂度(嵌套循环)
Time Complexity of an Algorithm (Nested Loops)
我正在尝试计算这个给定算法的伪代码的时间复杂度:
sum = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= n / 6; j++)
sum = sum + 1;
我知道第一行运行
n次
但我不确定第二行。
你进行了 n*n/6 次操作,因此,时间复杂度是 O(n^2/6) = O(n^2).
这里有一个简单的双循环:
for i=1;i<=n;i++
for j=1; j<=n/6; j++
因此,如果您计算循环体将被执行多少次(即这行代码 sum = sum + 1;
将被执行多少次),您将看到:
n*n/6 = n²/6
用 big-O 表示法表示是:
O(n²)
因为我们并不真正关心常数项,因为随着 n
的增长,常数项存在与否都没有(大)差异!
何时且仅当你完全明白我在说什么,你可以更深入地回答这个好问题:Big O, how do you calculate/approximate it?
但是,请注意,此类问题更适合 Theoretical Computer Science,而不是 SO。
使用 Sigma 符号,我们可以找到算法的渐近边界如下:
我正在尝试计算这个给定算法的伪代码的时间复杂度:
sum = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= n / 6; j++)
sum = sum + 1;
我知道第一行运行
n次
但我不确定第二行。
你进行了 n*n/6 次操作,因此,时间复杂度是 O(n^2/6) = O(n^2).
这里有一个简单的双循环:
for i=1;i<=n;i++
for j=1; j<=n/6; j++
因此,如果您计算循环体将被执行多少次(即这行代码 sum = sum + 1;
将被执行多少次),您将看到:
n*n/6 = n²/6
用 big-O 表示法表示是:
O(n²)
因为我们并不真正关心常数项,因为随着 n
的增长,常数项存在与否都没有(大)差异!
何时且仅当你完全明白我在说什么,你可以更深入地回答这个好问题:Big O, how do you calculate/approximate it?
但是,请注意,此类问题更适合 Theoretical Computer Science,而不是 SO。
使用 Sigma 符号,我们可以找到算法的渐近边界如下: