计算算法复杂性所需的帮助 - CSc基础

时间:2012-06-07 11:28:17

标签: complexity-theory

嗨我有两种算法需要它们的复杂性,我一开始就试过自己; 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;
}

非常感谢:)

1 个答案:

答案 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的术语比常量增长得快