这看起来非常简单,不是家庭工作的问题。
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)。
我想知道这是否可以更有效地解决。
答案 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,稀疏矩阵允许您跳过对这些元素执行加法。
否则,正如其他人所说,你也可以很容易地将问题并行化。