並べ替えられた順序と値で配列を受け取り、指定された値以上の要素の可能な限り最小のインデックスを返すバイナリ検索の修正バージョンがあります(値が最大)
上記のアルゴリズムを実行すると、すべてが正常に機能し、メソッドは期待どおりに機能します。ただし、ランタイムを測定するために、さまざまな入力サイズで実行しました。
for(int i=1;i<=20;i++){
int size=10*(i*i*i*i);
int[] array=createRandomSortedArray(size);
long startTime=System.nanoTime();
int index=findSmallestIndex(array, needle);
long et=System.nanoTime()-startTime;
System.out.println("To find "+needle+" in "+size+" inputs "+" execution time is "+et+" nanoseconds");
}
そして、以下は観察でした:-
To find 50 in 10 inputs execution time is 5775 nanoseconds
To find 50 in 160 inputs execution time is 1925 nanoseconds
To find 50 in 810 inputs execution time is 4330 nanoseconds
To find 50 in 2560 inputs execution time is 5293 nanoseconds
To find 50 in 6250 inputs execution time is 3849 nanoseconds
To find 50 in 12960 inputs execution time is 3368 nanoseconds
To find 50 in 24010 inputs execution time is 3849 nanoseconds
To find 50 in 40960 inputs execution time is 11548 nanoseconds
To find 50 in 65610 inputs execution time is 9143 nanoseconds
To find 50 in 100000 inputs execution time is 4812 nanoseconds
To find 50 in 146410 inputs execution time is 4812 nanoseconds
To find 50 in 207360 inputs execution time is 11549 nanoseconds
To find 50 in 285610 inputs execution time is 8661 nanoseconds
To find 50 in 384160 inputs execution time is 8661 nanoseconds
To find 50 in 506250 inputs execution time is 11549 nanoseconds
To find 50 in 655360 inputs execution time is 11067 nanoseconds
To find 50 in 835210 inputs execution time is 11549 nanoseconds
To find 50 in 1049760 inputs execution time is 11549 nanoseconds
To find 50 in 1303210 inputs execution time is 11067 nanoseconds
To find 50 in 1600000 inputs execution time is 12030 nanoseconds
10入力の実行時間は、連続する160入力サイズよりも大幅に長いことがわかります。確認するために、ループの外側で10個の入力を単独で実行したところ、次の結果が得られました。
To find 50 in 10 inputs execution time is 962 nanoseconds
どうしてこんなことに?なぜこの異常が存在するのですか?実行時間が前の小さい入力サイズよりも遅い他のステップもいくつかあります。