2015-03-19 35 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