代碼:總結一個2維數組
for (int i = 0 ; i < n ; i++)
for (int j = 0 ; j < n ; j++)
sum += ? ;
什麼是好?
sum += a[i][j] or
sum += a[j][i]
爲什麼?
代碼:總結一個2維數組
for (int i = 0 ; i < n ; i++)
for (int j = 0 ; j < n ; j++)
sum += ? ;
什麼是好?
sum += a[i][j] or
sum += a[j][i]
爲什麼?
鑑於您有一個平方數組(列數=行數)的事實,運行時間/結果沒有差異。
sum+=a[i][j];
Ex。
1 2 3
4 5 6
7 8 9
sum= 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9;
這一個通過從第一行開始,就加入它的每一個數字的總和是不言而喻到下一行後,使之和。
sum + = a [j] [i];
Ex。
1 2 3
4 5 6
7 8 9
sum= 1 + 4 + 7 + 2 + 5 + 8 + 3 + 6 + 9;
另一方面,這一個取一列上的每個元素的總和,然後它移動到下一列。
如果你沒有相同數量的行和列,你將不得不編輯一些for語法。
for(int i = 0; i < n; i++) // n = number of rows
for(int j = 0; j < m; j++) // m = number of columns
sum += a[i][j];
當然這裏你可以反轉fors和/或使用sum + a [i] [j];最終結果將是相同的,但總和將以另一種方式創建。
編輯由於新的信息:
知情自己一些關於時間複雜度和實際上有一個小的時間差,由於cache.Accessing數據存儲器,併攏比得更快的是相距甚遠所以[i] [j]會比[j] [i]更好。
爲了看到那些你需要使用巨大的n作爲數組大小的區別。
感謝您的幫助。我喜歡你的編輯回答我的問題:D – Eagle
作爲一般規則,在處理多維度時,爲了自己的理智,我嘗試保持字母順序。 I.E:
sum += a[i][j][k]
有道理,但表現仍然存在差異。這就是我總是這樣做的。但是,您還必須記住一個程序的性能 – Eagle
就目前而言,確實沒有什麼區別。如果你關心矩陣的總和(例如2維數組),它應該沒關係。最後你會得到相同的金額。如果我們假設你使用「i」掃描行,「j」掃描列,那麼如果你做「sum + = a [i] [j]」,你會得到「一個時間「,如果你做了」sum + = a [j] [i]「,那麼它將成爲一次一列。
因此,如果你不關心中介子支付,但總和是你所關心的,那就沒有對錯的方式,或者更好或更壞的方式。 「sum + = a [i] [j]」雖然更容易閱讀和理解。
什麼語言? (我猜C?) –
你似乎不明白2D數組是如何工作的。 a [n]表示「由n索引的數組」,a [n] [m]表示「在n處索引的數組的位置m處的索引值」,所以除非我們談論某些特定情況,否則這些不是互換。 –
@David Robinson.Yes。但是,您使用的是哪種語言? – Eagle