2013-04-17 60 views
1

代码:总结一个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] 

为什么?

+0

什么语言? (我猜C?) –

+0

你似乎不明白2D数组是如何工作的。 a [n]表示“由n索引的数组”,a [n] [m]表示“在n处索引的数组的位置m处的索引值”,所以除非我们谈论某些特定情况,否则这些不是互换。 –

+0

@David Robinson.Yes。但是,您使用的是哪种语言? – Eagle

回答

2

鉴于您有一个平方数组(列数=行数)的事实,运行时间/结果没有差异。

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作为数组大小的区别。

+0

感谢您的帮助。我喜欢你的编辑回答我的问题:D – Eagle

0

作为一般规则,在处理多维度时,为了自己的理智,我尝试保持字母顺序。 I.E:

sum += a[i][j][k] 
+0

有道理,但表现仍然存在差异。这就是我总是这样做的。但是,您还必须记住一个程序的性能 – Eagle

1

就目前而言,确实没有什么区别。如果你关心矩阵的总和(例如2维数组),它应该没关系。最后你会得到相同的金额。如果我们假设你使用“i”扫描行,“j”扫描列,那么如果你做“sum + = a [i] [j]”,你会得到“一个时间“,如果你做了”sum + = a [j] [i]“,那么它将成为一次一列。

因此,如果你不关心中介子支付,但总和是你所关心的,那就没有对错的方式,或者更好或更坏的方式。 “sum + = a [i] [j]”虽然更容易阅读和理解。