2011-12-03 8 views
1

ハッシュ挿入の実行時間を計算する必要があります。私は時間を行うためにクロックを使用していますが、私はゼロで終わるつもりです。最も効率的な方法がありますか?ハッシュ挿入の実行時間の計算?

cout << "Testing chaining probing...\n"; 
    HashTable_chaining ChainingHT(ITEM_NOT_FOUND, 101); 
    int i = 0; 
    while(i != DataArray.size()) 
    { 
     clock_t tStart = clock(); 
     ChainingHT.insert(DataArray[i]); 
     cout<<"Time taken:"<<(double)(clock() - tStart)/100000<<endl; 
     if(i != NULL) 
     { 
      collision_count++; 
     } 
     i++; 

    } 
+2

'CLOCKS_PER_SEC'で除算すると100000ではありません。 –

+0

CLOCKS_PER_SECは何ですか? – user977154

+1

@ user977154:これは 'clock()'の結果を秒単位で分けるものです。一部のシステムでは100000です。他のシステムではそうではありません。 –

答えて

3

単一のハッシュインサートが測定できないほど速いです:

これは、これまでのところ、それは私のコードです。最後に挿入の百万円、

clock_t tend = clock(); 

をやって、あなたのプログラムの開始時に

clock_t tstart = clock(); 

を入れてください。そして、浮動小数点で計算します

cout << "cpu time=" 
     << ((double)tend - (double)tstart)/CLOCKS_PER_SEC << endl; 

典型的な現在のコンピュータは、いくつかの億を二あたり基本マシン命令を実行します(ただし、最高の状態でミリ秒単位のクロックの分解能を持ちます)。

1

私の最初の推測では、挿入が非常に速く、ゼロになると思います。このコードで試したことは決してしません。代わりに、10000個の挿入を行い、それにかかる時間を計算し、その数を10000で割って挿入に要する平均時間を求めます。

+0

おそらく10000の挿入でさえ十分ではありません.... –

0

10000/100000/1000000の挿入ループを実行しても問題ありません(実行するまでに時間がかからない値になるまで、挿入する回数を指定する必要があります)。

ウィンドウで作業している場合は、より良い解像度を得るためにperformance countersを使用することを検討してください(内部のコードを参照)。

+0

しかし、この解決策はクロスプラットフォームではありません(それはapi呼び出しに勝っています)。 – Yappie

+0

OPは彼がクロスプラットフォームを必要とするかどうかは言わなかった。私は彼が窓に取り組んでいると推測しています。 – OSH

+0

linuxでは、 'clock_gettime'は通常より良い精度を提供します。直接的なパフォーマンスカウンタへのアクセスには、いくつかの低レベルのトリックがあります。 –