私は、シーケンシャルとバイナリの 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 ミリ秒です。この数値は、0.1 ミリ秒かかる 32 番目のワードまで下方に揺れます。残りの 150 ワードはすべて 0.0 ms かかります。
比較回数と経過時間の間に直接的な相関関係があると予想していました。何がうまくいかないのですか?
余談ですが、compareTo メソッドによって行われた比較の数 (つまり、単語の長さ) が時間に影響を与えている可能性があることに気付きました。結論に達する) さらに下に表示される場合は、まったく時間がかかりません。