使用其他元素添加数组中的每个元素的高效解决方案

时间:2012-05-16 20:25:02

标签: java arrays matrix addition

这看起来非常简单,不是家庭工作的问题。

public void sum(int[] arr){
  for(int i=0;i<arr.length;i++)
  {
    for(int j=0;j<arr.length;j++)
      System.out.println(arr[i]+"+"+arr[j]+"+"+"="+(arr[i]+arr[j]));
  }   
}//end of sum function

这将打印每个元素的所有总和。这是O(n ^ 2)。

我想知道这是否可以更有效地解决。

3 个答案:

答案 0 :(得分:3)

由于A + B等于B + A,你可以检查索引i中初始元素之后的元素:

public void sum(int[] arr){
  for(int i=0;i<arr.length;i++)
  {
    for(int j=i;j<arr.length;j++) //Note: j = i, not j = 0
      System.out.println(arr[i]+"+"+arr[j]+"+"+"="+(arr[i]+arr[j]));
  }   
}//end of sum function

它仍然是O(n ^ 2)/ 2,因此复杂性基本上仍然是二次的。

答案 1 :(得分:0)

您是否关心打印结果的顺序? 如果你不这样做,你可以拆分任务并查看平行减少。

我没有对它进行测试,但这些内容中的内容

public void sum(int[] arr){
for(int i=0;i<arr.length;i++)
{
   for(int j=0;j<arr.length/2;j=+2)
   System.out.println(arr[i]+"+"+arr[j]+"+"+"="+(arr[i]+arr[j]));
   System.out.println(arr[i+1]+"+"+arr[j+1]+"+"+"="+(arr[i+1]+arr[j+1]));
}   
}//end of sum function

答案 2 :(得分:0)

如果您使用sparse matrices,则可以更快地添加矩阵。由于0 + 0 = 0,稀疏矩阵允许您跳过对这些元素执行加法。

否则,正如其他人所说,你也可以很容易地将问题并行化。