2015-03-19 73 views
9

Matrix Chain Multiplication页面在维基百科上,有这个片段的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];实际上是多余的,因为它所做的是重新分配第二个维度?

+0

我已经从文章中删除了多余的代码。 – chrylis 2015-03-19 05:30:57

+0

'm [i] [i] = 0'也没有什么意义,因为它只是对角线的零。 – CodesInChaos 2015-03-19 10:02:52

+0

不,因为整个数组初始化为只包含零。 – Clashsoft 2017-07-19 16:42:55

回答

10

是的。

m[i] = new int[n];是绝对多余的。看起来这条线是来自c式的psedocode的遗产,在这种情况下,这种启动是非常秘密的。

+6

不仅如此,整个循环也是如此。 Java将'int []'初始化为零。 – chrylis 2015-03-19 05:29:10