这是多维数组中内存空间的冗余分配吗



在维基百科上的矩阵链乘法页面上,有一段Java代码:

public void matrixChainOrder(int[] p) {
    int n = p.length - 1;
    m = new int[n][n];
    s = new int[n][n];
    for (int i = 0; i < n; i++) {
        m[i] = new int[n];
        m[i][i] = 0;
        s[i] = new int[n];
    }
    ...

m = new int[n][n];不是已经在其两个维度上分配了大小为n的内存空间吗?所以循环m[i] = new int[n];中的这一步骤实际上是多余的,因为它所做的只是再次重新分配第二维度?

是的。

m[i] = new int[n];是绝对多余的。这一行似乎是来自c风格psedocode的继承,在那里这种初始化是必要的。

最新更新