代码:
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 :(得分:2)
鉴于您有一个平方数组(列数=行数),运行时间/结果没有区别。
sum+=a[i][j];
实施例
1 2 3
4 5 6
7 8 9
sum= 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9;
这一个通过从第一行开始并将其上的每个数字添加到总和并且在它进入下一行之后得到总和。
和+ = A [j]的[I];
实施例
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];最终结果将是相同的,但总和将以另一种方式创建。
根据新信息进行修改:
通知自己一点时间复杂度,由于缓存实际上存在很小的时间差。接近数据存储器的速度比远距离的数据存储器快,因此a [i] [j]会更好而不是[j] [i]。
为了看到那些你需要使用巨大的n作为数组大小的差异。
答案 1 :(得分:1)
对于更好的东西,确实没有区别。如果你关心矩阵的总和(例如二维数组),那应该没关系。你最终会得到相同的金额。如果我们假设您使用“i”来扫描行,并使用“j”来扫描列,那么如果您执行“sum + = a [i] [j]”,您将得到“一行”一段时间“,如果你这样做”sum + = a [j] [i]“,那么它将一次只有一列。
因此,如果您不关心中间子金额,但总金额是您关心的,那么没有正确或错误的方式或更好或更坏的方式。 “sum + = a [i] [j]”虽然更容易阅读和理解。
答案 2 :(得分:0)
作为一般规则,在处理多维度时,我会尝试按字母顺序保持自己的理智。即:
sum += a[i][j][k]