计算数组访问

时间:2014-03-26 17:16:59

标签: java arrays complexity-theory

我试图弄清楚如何确定某些简单方法的复杂性(数组访问)。

如果我这样做,我想要一些确认。 例如这种方法。

    int i = 0;  
    while(i < N){
        clone[i][j] = clone[++i][j];
        clone[i][j] = 0;
    }

数组访问总和最多三个吗?一个用于clone[i][j]另一个用于clone[++i][j],最后一个用于clone[i][j]。这意味着它有±3N数组访问?

这样的事情怎么样:

if(clone[i][j] == value1 || clone[i][j] == value2)

我可以将此视为一个数组访问,还是两个?

提前致谢!

1 个答案:

答案 0 :(得分:2)

我将这些视为六个数组访问。

您正在访问2D数组,以及类似

的语句
clone[i][j] = 0;

可以类似地写成

int temp[] = clone[i];
temp[j] = 0;

您还可以查看字节码:类似

的类
class ArrayAcc
{
    static void foo()
    {
        int array[][] = new int[2][2];
        array[1][1] = 123;
    }

}

编译和反汇编
  

javap -c ArrayAcc.class

给出以下输出:

....
static void foo();
Code:
   0: iconst_2
   1: iconst_2
   2: multianewarray #2,  2             // class "[[I"
   6: astore_0
   7: aload_0
   8: iconst_1
   9: aaload
  10: iconst_1
  11: bipush        123
  13: iastore
  14: return

aaload指令加载对&#34;内部&#34;的引用。堆栈上的数组。 iastore指令将值123放入此内容&#34;内部&#34;阵列。


对于问题的其他部分,

if(clone[i][j] == value1 || clone[i][j] == value2)

这取决于第一个条件是否为true。如果第一个条件是true,那么第二个条件将进行评估。如果你写了

if(clone[i][j] == value1 | clone[i][j] == value2)

(只需一个|),您就可以随时查看两个条件。