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