嗨我有两种算法需要它们的复杂性,我一开始就试过自己; O(N ^ 2)& O(N ^ 3)他们在这里:
将Y视为'y = int [N] [N]',并将B视为'B = int [N] [N]'....
int x(int [] [] y)
{
int z = 0
for (int i =0; i<y.length; i++)
z = z + y[i].length;
return z;
}
int A (int [] [] B)
{
int c =0
for ( int i =0; i<B.length; i++)
for (int j =0; j<B[i].length; j++)
C = C + B[i] [j];
return C;
}
非常感谢:)
答案 0 :(得分:1)
要计算算法的复杂性,您需要计算算法中执行的操作数量(大O符号关注最坏情况)
在第一种情况下,你有一个循环,执行N次(y.length == N)。在循环内部,您有一个操作(在每次迭代时执行)。这是输入数量的线性,因此O(x)= N。
注意:计算y [i] .length是一个恒定长度的操作。
在第二种情况下,你有外循环执行了N次(就像在第一种情况下一样),并且在每次迭代中如果执行相同的长度(N == B [i] .length)则另一个循环。在内部循环内部,您有一个操作(在内循环的每次迭代中执行)。这总体上是O(N * N)== O(N ^ 2)。
注意:计算b [i] [j]是一个恒定长度的操作
注意:请记住,对于big-O,只有增长最快的术语很重要,因此可以忽略附加常量(例如,返回值的初始化和返回指令都是操作,但是是常量而不是在循环中执行;依赖于N的术语比常量增长得快