使用time.time()计时函数常返回0秒
我需要给我在课堂上做的一个算法实现计时,所以我使用了time.time()这个函数。实现之后,我还得在一些数据文件上运行这个算法,这些文件里有小数据集和大数据集,我想正式分析一下算法的复杂度。
不过,奇怪的是,在小数据集上,我的运行时间显示为0秒。即使我用这个函数查看大数据集的运行时间时,精度可以达到0.000000000000000001,我还是不敢相信在小数据集上运行时间真的会少于这个。
我想问的是:使用这个函数会有问题吗?如果有的话,有没有其他更精确的函数可以用?还是说我做错了什么?
如果你需要我的代码,这里在下面:
import sys, time
import random
from utility import parseSystemArguments, printResults
...
def main(ville):
start = time.time()
solution = dynamique(ville) # Algorithm implementation
end = time.time()
return (end - start, solution)
if __name__ == "__main__":
sys.argv.insert(1, "-a")
sys.argv.insert(2, "3")
(algoNumber, ville, printList) = parseSystemArguments()
(algoTime, solution) = main(ville)
printResults(algoTime, solution, printList)
这是printResults函数:
def printResults(time, solution, printList=True):
print ("Temps d'execution = " + str(time) + "s")
if printList:
print (solution)
2 个回答
4
不要把系统时间的精度和浮点数的精度搞混。电脑上的时间精度取决于系统时钟更新的频率。这个更新频率在不同的机器上是不同的,所以如果你想看到时间的变化,确保你的代码执行时间至少要有一毫秒或更长。你可以试着把代码放进一个循环里,像这样:
start = time.time()
k = 100000
for i in range(k)
solution = dynamique(ville)
end = time.time()
return ((end - start)/k, solution)
最后,你需要把总时间除以循环的次数,这样才能知道你的代码实际运行了一次需要多长时间。如果你想要更准确的执行时间,可能需要增加循环次数k,或者如果你的电脑在循环里运行很长时间,可能需要减少k。
5
我解决问题的方法是使用timeit模块,而不是time模块。
import timeit
...
def main(ville):
start = timeit.default_timer()
solution = dynamique(ville)
end = timeit.default_timer()
return (end - start, solution)