使用time.time()来计时函数通常会返回0秒

时间:2014-03-25 05:16:36

标签: python algorithm time time-complexity

我必须计算我在其中一个类中执行算法的时间,并且我使用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)

2 个答案:

答案 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)