我必须计算我在其中一个类中执行算法的时间,并且我使用time.time()函数来执行此操作。实现之后,我必须在包含越来越大的数据集的许多数据文件上运行该算法,以便正式分析其复杂性。
不幸的是,在小数据集上,即使我在查看较大数据集的运行时间时使用该函数获得0.000000000000000001的精度,我也得到0秒的运行时间,我无法相信它确实需要的时间少于在较小的数据集上。
我的问题是:使用此功能是否有问题(如果有的话,是否有另一种我可以使用的具有更好精度的功能)?或者我做错了什么?
如果您需要,我的代码就是:
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)
答案 0 :(得分:3)
不要将系统时间的分辨率与浮点数的分辨率混淆。计算机上的时间分辨率仅与更新系统时钟一样频繁。系统时钟的更新频率因机器而异,因此为了确保您看到时间的差异,您需要确保它的执行时间为毫秒或更长。试着把它放到这样的循环中:
start = time.time()
k = 100000
for i in range(k)
solution = dynamique(ville)
end = time.time()
return ((end - start)/k, solution)
在最后的计数中,您需要除以循环迭代次数,以了解代码实际运行的时间。您可能需要增加k以更好地衡量执行时间,或者如果计算机在循环中运行很长时间,您可能需要减少它。
答案 1 :(得分:3)
我的问题的解决方案是使用timeit模块而不是时间模块。
import timeit
...
def main(ville):
start = timeit.default_timer()
solution = dynamique(ville)
end = timeit.default_timer()
return (end - start, solution)