2017-03-24 11 views
1

私はカップルソートアルゴリズムを書いています。少なくとも並べ替え時間を比較したい。しかし、StoogeSortを除くすべてのソート時間が最初にループした後。私はバックグラウンドで最適化していると思うが、どの測定法を検討すべきか?最初のものか他のものか?なぜこのことが起こっているのですか?ソート時間は常に最初のソートと異なります

public static void main(String[] args) { 
    RandomNumber rn = new RandomNumber(); 

    Scanner sc = new Scanner(System.in); 
    while(true){ 
     System.out.println("Enter the input size."); 
     int n = sc.nextInt(); 
     int[] experimentalArray = rn.experimentalArrayGenerator(n); 



     Stopwatch sw1 = new Stopwatch(); 
     StoogeSort ss = new StoogeSort(experimentalArray.clone()); 
     System.out.println("StoogeSort : " + sw1.elapsedTime() + " µs"); 

     Stopwatch sw2 = new Stopwatch(); 
     RadixSort rs = new RadixSort(experimentalArray.clone()); 
     System.out.println("RadixSort : " + sw2.elapsedTime() + " µs"); 

     Stopwatch sw3 = new Stopwatch(); 
     ShakerSort shs = new ShakerSort(experimentalArray.clone()); 
     System.out.println("ShakerSort : " + sw3.elapsedTime() + " µs"); 

     Stopwatch sw4 = new Stopwatch(); 
     MaximumSubarray ms = new MaximumSubarray(); 
     int a = ms.maxSubArraySum(experimentalArray.clone()); 
     System.out.println("MaximumSubarray : " + sw4.elapsedTime() + " µs"); 
     System.out.println("------------------------------------------------------"); 
    } 
} 

4ループ後の出力:

enter image description here

+1

乱数配列をソートすることはほとんど同じ時間を要しません。 –

+0

しかし、これは変です。他の人とはちょうど最初のもの。 – Pareidolia

+0

配列[1,2,3,4,5,6,7,8,9,10]を例にとります。それをソートするにはアルゴリズムが何回反復するのでしょうか?次に配列[10,5,3,7,2,8,1,9,6,4]を考えてみましょう。同じ時間がかかりますか? –

答えて

1

Microbenchmarkingがでジョンスキートで述べたようになど、多くの要因が、実行時間(例えば実行時コンパイラとガベージコレクションに影響を与える複雑な問題ですコメント)。

あなたがmicrobenchmarkingにアプローチする方法の理解を得るためにしたい場合は、ピーター・セストフトでthis documentをお読みください。

時には1は、新しい方法で問題を解決するかどうかを メジャーに、例えば、ソフトウェアの速度を測定したい:文書が外部リソースであるとして、ここでは文書の要約を引用し

古い よりも高速です。このような時の測定及びマイクロベンチマークを作ることは、特にJavaの 仮想マシンとMicrosoftの共通言語基盤(.NET)などの管理プラットフォームで、 かなりの注意が必要です か、他の結果は任意と誤解を招く可能性があります。

ここでは、特に プラットフォームのマイクロベンチマークの実行に関するアドバイスを提供します。 ほとんどの例はJavaで書かれていますが、アドバイスはScala、C#、F#などの管理対象プラットフォーム上で実行される 言語に適用されます。 このバージョンではJavaの機能インタフェースを使用しており、Java 8が必要です。

関連する問題