私は、2つの異なる検索アルゴリズム(シーケンシャルとバイナリ)の時間を測定する必要がある割り当てを行っています(効率についてのポイントを作っていると思います)。私は約280語の検索対象のリストと約1200語の検索プールのリストを持っています。私は両方のファイルを読み込み、ArrayListsに単語を格納しました。ここで私の検索時間が短くなるのはなぜですか?
は、私がこれまで実施してきたシーケンシャルなアルゴリズムに関連するビットです。この後
long startTime = System.nanoTime();
//search sorted list for as long as end of list has not been reached and
//current list item lexicographically precedes target String
while((compareResult > 0)&&(position != searchPool.size()-1)){
//update to current position
position += 1;
compareResult = target.compareTo(searchPool.get((int)position));
comparisonCount += 1;
}//end while loop
long endTime = System.nanoTime();
timeElapsed = endTime - startTime; //timeElapsed also a long
が、私はミリ秒単位で(作られた比較の数と経過時間を表示するので、私はで割ますよ最初の100万人)。
最初の数え方で返される時間は、約0.5〜0.7 msです。この数は32ワードに向かって揺らぎ、0.1ミリ秒かかる。残りの150語はすべて0.0ミリ秒かかります。
私は、比較回数と経過時間との間に直接の相関があると予想していました。どんなアイデアが間違っているのでしょうか?
脇に:compareToメソッド(つまり単語の長さ)によって行われた比較の回数は、時間に影響を与えているかもしれませんが、検索されたリストには表示されない長い単語その結論に達する前にすべての項目に達する)彼らはさらに下に表示されているすべての時間がかかりません。
「java -version」と入力すると、何が表示されますか?ホットスポットやサーバービルドについて何か言えば、ホットスポットはAKJのように頻繁に実行されるコードを最適化しているということです。 – Bill
これはあなたの意味ですか? Javaバージョン "1.6.0_23" OpenJDKランタイム環境(IcedTea6 1.11pre)(6b23〜pre11-0ubuntu1.11.10.2) OpenJDKサーバーVM(ビルド20.0-b11、混合モード) –
はい、それです。 – Bill