3

Java アルゴリズムのパフォーマンスを効果的に測定するにはどうすればよいですか? それを行う正確な方法はありますか?

同じ種類の他の質問を読みましたが、満足していません。任意の助けをいただければ幸いです。

4

5 に答える 5

3
long reference=System.nanoTime();
your_funct();
long finishm=System.nanoTime();

System.out.println( ( (double)(finishm-reference) )/1000000000.0);  //in seconds

私のマシンでは 0.003 秒程度の意味のあるレベルです。つまり、ナノ秒単位で測定しますが、私のマシンでは最小のステップは約 3000000 ナノ秒です。

于 2012-09-02T16:07:35.973 に答える
3

ある種のタイミングを示すパフォーマンスを求めます。しかし、それでは何と比較しますか?

アルゴリズムを測定する一般的な方法は、簡略化された数学的アプローチを取る Big O を使用することです。

これを非常に基本的なレベルで説明すると、整数のリストの単純な線形検索には、線形 (n) 最悪の場合の大きな o があります。例: for(int i = 0; i < sizeofarray; ++i) if(array[i] == to_find) return i;

最悪の場合、これには i 回の反復が必要になります (多くの場合、数値は big o では n と呼ばれます)。そのため、n または線形複雑度アルゴリズムと呼びます。

バブルソート アルゴリズムのようなものは、ループ内のループであるため、n * n 複雑度 = n^2 または 2 次複雑度になります。

like と like を比較すると、ソートだけを考えれば、クイックソートは二次複雑度 (n log n 複雑度) よりも効率的であるため、クイックソートはバブルソートよりも「優れている」と見なすことができます。

したがって、アルゴリズムを評価するときは、n の観点から考えてください。ループはありますか?幾つか?少ないほど良い。ループはさらに良くありません-一定の大きなo。

于 2012-09-02T16:40:40.103 に答える
2

実用的または理論的にすることができれば。実用的であれば、アルゴリズムが開始する前にタイマーを置き、終了したら停止します。理論的な場合は、Big O 表記を使用すると (それほど難しくありません)、その時間または空間の複雑さを見積もることができます。

于 2012-09-02T16:05:53.017 に答える
2

一部のプロファイラーを使用できます。多くの IDE (Netbeans など) には 1 つがあります。

于 2012-09-02T16:08:09.037 に答える