如何在 big-o 中找到算法的运行时间
How to find runtime of algorithm in big-o
public void do() {
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
// do something
for (int i = 1; i < rows - 1; i += 2)
for (int j = 1; j < columns - 1; j += 2) {
// do something
for (int i = 50; i > 0; i--)
// do something
for (int i = 1; i < rows - 1; i++)
for (int j = 1; j < columns - 1; j++)
// do something
}
在这种情况下,行和列将等于:
rows = (size * 10) + 1;
columns = rows + 10;
其中 size
(n) 为 1、2、4 或 8。
由于 rows
和 columns
变量的大小会增加,并且每个循环都会 运行 遍历行,然后遍历循环内的列,我可以这样说吗函数将 运行 in O(n^2)?
我对算法的整体复杂性还很陌生,希望对此有一些意见。非常感谢。
直接回答您的代码:
What is the Big-O of a nested loop, where number of iterations in the inner loop is determined by the current iteration of the outer loop?
N 用于一个循环,所以两个嵌套 = N^2,等等。如果嵌套循环中有 2 条指令,实际上是 2N^2,但是乘以 2 是有用的,所以 N ^2 无论如何。
public void do() {
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
// do something
for (int i = 1; i < rows - 1; i += 2)
for (int j = 1; j < columns - 1; j += 2) {
// do something
for (int i = 50; i > 0; i--)
// do something
for (int i = 1; i < rows - 1; i++)
for (int j = 1; j < columns - 1; j++)
// do something
}
在这种情况下,行和列将等于:
rows = (size * 10) + 1;
columns = rows + 10;
其中 size
(n) 为 1、2、4 或 8。
由于 rows
和 columns
变量的大小会增加,并且每个循环都会 运行 遍历行,然后遍历循环内的列,我可以这样说吗函数将 运行 in O(n^2)?
我对算法的整体复杂性还很陌生,希望对此有一些意见。非常感谢。
直接回答您的代码: What is the Big-O of a nested loop, where number of iterations in the inner loop is determined by the current iteration of the outer loop?
N 用于一个循环,所以两个嵌套 = N^2,等等。如果嵌套循环中有 2 条指令,实际上是 2N^2,但是乘以 2 是有用的,所以 N ^2 无论如何。