算法性能突然提高约 10 倍
背景信息
我最近为我的算法和数据结构课程交出了一份课。任务是实现一个解决方案来查找随机生成的数组的最大子数组。我们被要求实现蛮力算法和递归分而治之算法。
然后,我们被要求分析运行时间,以查看在哪个问题大小下,蛮力算法将比递归解决方案更快。这是通过测量两种算法的运行时间(使用System.nanoTime()测量值)来完成的,以增加问题大小。
但是,确定这一点比我预期的要棘手一些。
好奇心
如果我首先运行问题大小为5000的两种算法,超过10次,递归算法的运行时间从一次运行到下一次运行,大约10倍(从~1800μS执行,到~200μS执行),并且在其余的迭代中保持得更快。有关示例,请参阅下图
第 2 列和第 3 列仅用于验证两种算法是否都返回正确的最大子数组
这在带有Java 1.6.0_29的OS X 10.7.3上进行了测试 - 在运行Windows 7和Java 1.6的PC上执行时,结果是相同的(确切的版本号未知)。
该程序的源代码可以在这里找到:https://gist.github.com/2274983
我的问题是这样的:是什么原因导致算法在“预热”后突然表现得更好?