我试图通过首先在Java中实现算法然后计算不同输入的处理器时间来计算算法的性能。我使用ThreadMXBean.getCurrentThreadCpuTime()
来获取系统时间。
我首先使用以下代码对其进行了分析:
calculateProfile() {
for (int n = 10; n <= 200; n++) {
long time_beg = getCurrentThreadTime();
run_my_algorithm(n);
long time_end = getCurrentThreadTime();
System.out.println("Output = " + n + " " + (time_end - time_beg));
}
然而,我惊讶地发现随着n值的增加,时间曲线不会像预期的那样增加。在某些情况下,虽然我的算法的时间复杂度为O(n),但执行时间实际上减少了。
为了研究这个问题,我在每次执行时更改了此代码以运行一次算法,并手动检查每个执行实例的时间配置文件。在这种情况下,我发现执行时间相对于n的线性增加。所以我的问题是:两个案例有何不同?什么使配置文件模式有所不同?并且,在这种情况下如何最好地自动化此分析过程?