为什么搜索次数越多,我的搜索时间就越短



我正在做一项任务,要求我测量两种不同的搜索算法(顺序搜索算法和二进制搜索算法)所花费的时间(我想是为了强调效率)。我有一个大约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毫秒。

我期望比较次数和经过的时间之间有直接的相关性。知道出了什么问题吗?

旁白:我突然想到,compareTo方法进行的比较次数(即单词长度)可能会影响时间,然而,即使是没有出现在搜索列表中的长单词(因此必须在得出结论之前与所有项目进行比较),如果它们出现得更远,也不会花时间。

JVM优化了频繁执行的代码路径,使它们变得更快。根据应用程序的不同,最初的几次迭代可能涉及建立连接、加载资源等。

因此,作为一般策略,您应该丢弃前几个样本。并将测量值作为较大样本的平均值,以获得更可靠的结果。

相关内容

  • 没有找到相关文章

最新更新