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

时间:2012-02-25 12:09:51

标签: java search nanotime

我正在做一项任务,要求我测量两种不同的搜索算法所采用的时间,顺序和二进制(我想要提出关于效率的观点)。我有一个大约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方法所做的比较次数(即字长)可能会影响时间,但即使是长字也不会出现在搜索列表中(因此必须与所有字符进行比较)达到该结论之前的项目)如果它们显得更进一步,则不要花时间。

1 个答案:

答案 0 :(得分:2)

JVM优化了经常执行的代码路径,因此它们会变得更快。同样取决于应用程序,前几次迭代可能涉及建立连接,加载资源等。

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