代码:
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];最终结果将是相同的,但总和将以另一种方式创建。
由于新信息而编辑:
我自己了解了一些时间复杂性,实际上由于缓存的原因,有一个很小的时间差。访问靠近的数据存储器比相距很远的数据存储器更快,因此a[i][j]会比a[j][i]更好。
为了查看它们之间的差异,您需要使用一个巨大的n作为数组的大小。
就什么更好而言,真的没有区别。如果你关心矩阵的总和(例如二维数组(,这应该无关紧要。你最终会得到同样的金额。如果我们假设你用"i"扫描行,用"j"扫描列,那么如果你做"sum+=a[i][j]",你会得到"一次一行"的总和,如果你做了"sum+=a[j][i]",那么它将是一次一列。
因此,如果你不关心中间人的小计,但总金额是你关心的,那么就没有对错之分,也没有更好或更坏的方法。不过,"sum+=a[i][j]"更容易阅读和理解。
一般来说,在处理多维问题时,为了保持理智,我会尽量按字母顺序排列。I.E:
sum += a[i][j][k]