我正在做一项任务,要求我测量两种不同的搜索算法所采用的时间,顺序和二进制(我想要提出关于效率的观点)。我有一个大约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方法所做的比较次数(即字长)可能会影响时间,但即使是长字也不会出现在搜索列表中(因此必须与所有字符进行比较)达到该结论之前的项目)如果它们显得更进一步,则不要花时间。
答案 0 :(得分:2)
JVM优化了经常执行的代码路径,因此它们会变得更快。同样取决于应用程序,前几次迭代可能涉及建立连接,加载资源等。
因此,作为一般策略,您应该丢弃前几个样本。并将测量值作为较大样本的平均值,以获得更可靠的结果。