我正在测试几种不同的算法(用于解决 16x16 数独),使用 timeit 模块测量它们的性能。但是,似乎实际上只计算了第一次 timeit.repeat() 迭代,因为其他迭代变得更快。使用 t.repeat(repeat=10, number=1) 测试单个算法,得到以下结果:
[+] 结果......:solve1(函数1/1)
[+] 最快............:0.00003099
[+] 最慢............: 32.38717794
[+] 平均值*............:0.00003335(平均值计算,不含最小值/最大值)
10 个结果中的第一个总是需要更长的时间才能完成,这似乎只能通过 timeit.repeat() 循环的第 2 到 10 次迭代以某种方式使用循环先前迭代的缓存结果这一事实来解释。当在 for 循环中实际使用 timeit.repeat() 来比较几种算法时,似乎只计算了一次难题的解决方案:
[+] 结果......:solve1(函数 1/3)
[+] 最快............:0.00003099
[+] 最慢............: 16.33443809
[+] 平均*.......: 0.00003263(平均计算没有最小值/最大值)
[+] 结果......:solve2(函数2/3)
[+] 最快............:0.00365305
[+] 最慢............: 0.02915907
[+] 平均值*.........:0.00647599(平均值计算,不含最小值/最大值)
[+] 结果......:solve3(函数3/3)
[+] 最快............:0.00659299
[+] 最慢............: 0.02440906
[+] 平均值*.........:0.00717765(平均值计算,不含最小值/最大值)
真正奇怪的是算法的相对速度(相对于彼此)在整个测量过程中是一致的,这表明所有算法都在计算它们自己的结果。由于大部分中间结果(在计算第一个解决方案时获得)仍然在某种缓存中,由 python 进程保留,因此性能的这种极端提高?
任何帮助/见解将不胜感激。