0

これは非常に些細なことのように見え、在宅勤務の質問ではありません。

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)です。

これをもっと効率的に解決できるかどうか知りたいです。

4

3 に答える 3

2

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であるため、複雑さは基本的に2次式です。

于 2012-05-16T20:29:53.680 に答える
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
于 2012-05-16T20:28:09.590 に答える
0

疎行列を使用すると、行列をより速く追加できます。0 + 0 = 0 であるため、疎行列を使用すると、これらの要素の加算をスキップできます。

そうでなければ、他の人が言ったように、問題を非常に簡単に並列化することもできます。

于 2012-05-16T20:35:07.483 に答える