Почему мое время поиска уменьшается, чем больше запросов я делаю? - PullRequest
1 голос
/ 25 февраля 2012

Я выполняю задание, которое требует от меня измерения времени, затрачиваемого на два разных алгоритма поиска: последовательный и двоичный (я полагаю, чтобы подчеркнуть эффективность). У меня есть целевой список около 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

После этого я отображаю количество выполненных сравнений и прошедшее время (в миллисекундах, поэтому сначала делю на миллион).

Время, возвращаемое для первых нескольких чисел, составляет от 0,5 до 0,7 мс. Это число колеблется вниз до 32-го слова, которое занимает 0,1 мс. Все оставшиеся 150 слов занимают 0,0 мс.

Я ожидал прямой корреляции между количеством сравнений и прошедшим временем. Есть идеи, что не так?

В сторону: мне пришло в голову, что количество сравнений, выполненных методом сравнения (т. Е. Длины слов), может влиять на время, однако даже длинные слова, которые не отображаются в списке поиска (и, следовательно, должны сравниваться со всеми элементы до того, как этот вывод будет достигнут), не тратьте время, если они появляются дальше вниз.

1 Ответ

2 голосов
/ 25 февраля 2012

JVM оптимизирует пути кода, которые часто выполняются, чтобы они стали быстрее. Также в зависимости от приложения первые несколько итераций могут включать в себя установление соединения, загрузку ресурса и т. Д.

Так что в качестве общей стратегии вы должны отказаться от первых нескольких сэмплов. Для получения более достоверных результатов измерьте среднее значение по большим выборкам.

...