2016-04-12 1 views
-1

私は昨日以来この本を勉強しています。最初のアルゴリズムを理解して適用した後、私は自分自身に行き、別の方法で見てみました。ここではJavaの、示されたアルゴリズムでは、です:ソートアルゴリズムはH.Cormenの書籍の「Introduction to Algorithms」より速いのはなぜですか?

public static int[] sort(int[] array) 
{ 
    for(int i = 1; i < array.length; i++){ 
     int value = array[i]; 
     int j = i - 1; 

     while(j >= 0 && array[j] > value){ 
      array[j + 1] = array[j]; 
      j--; 
     } 
     array[j+1] = value; 
    } 

    return array; 
} 

そして、ここでは私のものです:

public static int[] sortb(int[] array) 
{ 
    for(int i = 0; i < array.length; i++){ 
     int value = array[i]; 
     int j = i; 

     while(j < array.length && value > array[j]){ 
      array[j] = array[j + 1]; 
      j++; 
     } 

     array[j] = value; 
    } 

    return array; 
} 

それぞれの関数呼び出しの100万のために、私は2番目のための第1のための32ミリと25ミリ秒を得ました。私はまだアルゴリズムから始まっているので、意味は分かりません。

+0

実際には意味がありません。私はアルゴリズムに集中し、速度の測定に集中するのにもっと時間を費やすでしょう。どのように正しく測定するのかわからない場合は、あらゆる種類の結果を得ることができ、無意味な意味を見つけようと時間を無駄にします。 – Kayaman

+0

@FarazDurrani教授がアルゴリズムを教えるとき、私はかなり悪い測定によって得られたミリ秒よりも「ビッグ・オー」に興味があると確信しています。 – Kayaman

+0

私は教授とは仕事していませんが、自分自身で – Despirithium

答えて

6

私はあなたの並べ替えが元のものよりもずっと速い理由を発見しました。あなたは並べ替えを一切していないからです。

あなたのコード

int value = array[i]; 
    int j = i; 

    while(j < array.length && value > array[j]) { ... } 

ためj = i

、そうvalue == array[j]あなたはwhileループに入る前に、したがって、あなたのwhileループ本体が実行されることはありません。あなたのソート結果は間違っています。それがあなたのコードが非常に高速な主な理由です。

+0

まあ、私は恥ずかしいです。気づいてくれてありがとう! – Despirithium

+0

をオフにする必要があります.... –

5

私の経験では(の学生の経験を読んでください)、この種の値はほとんど意味がありません。

多分、もう少しリソースを取ったり解放したりするバックグラウンドプロセスがありました。

あなたが手配しようとした特定のケースが、他のものよりも寓意の1つの方が良いかもしれません。あなたが別のランダムアレイを使用した場合

はたぶん、そのうちの一つは他よりもソートすることが近かった。..

良い対策を持っているために、あなたは通常、1だけでなく、多くのテストをしなければなりません。例えば、言語やコンパイラの時には特定機能、とにかく

.. 10K要素それぞれの1Kアレイを生成し、両方algorythmsとこの配列のそれぞれをソートは、理論的に正確に同じ複雑さとalgorythmsに対して異なる結果を生成することができます(1つの例:C++で気づいたら、2次元配列を最初に列で、次に行で横断すると、逆の場合よりも非常に異なるスピードになりますが、どちらが覚えていないかより速かった。

+1

このようなC++ 2次元配列の 'a [10] [10]'を意味するならば、外側ループをトラバースすると 'a [0-9]'、内側ループが 'a [i] [ 0-9] 'は' a [i] [0-9] 'がメモリに順次配置されるためです。 – Nier

関連する問題