c-求和二维数组



代码:

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]

相关内容

  • 没有找到相关文章

最新更新