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