python中代码的运行时间有多长

时间:2013-10-25 16:59:43

标签: python performance python-3.x time

我需要计算大约需要多长时间才能运行此代码,假设循环的速度是线性的(我的老师告诉我假设它,我知道这不是真的,但我们是初学者所以..):

num = 2**100
cnt = 0
import time
t0 = time.clock()
for i in range(num):
    cnt = cnt+1

t1 = time.clock()
print("running time: ", t1-t0, " sec") 

我等了3个小时并没有得到任何东西,因此,正如人们建议我做的那样,我计算了一个较小的输入:2**20。这花了0.24478681215692052秒。

现在,我尝试以两种方式继续计算,我认为必须得到相同的结果,但事实并非如此。

  1. 如果我假设循环的速度是线性的,要计算2**100我只需计算(0.24478681215692052)^5,因为(2**20)**5 = 2**100

    我得到的结果是:0.000878901251447358秒(这真的不合逻辑)

  2. 我尝试了另一种方式:

    • 2**20 - 0.24478681215692052 sec
    • 2**100 - ?

    并像这样繁殖:

    2**100 * 0.24478681215692052 / 2**20
    

    并使用this calculator for big numbers得到:296101054897497890198453.29788130608283648秒。

  3. 我怎么可能得到2个不同的答案?而且似乎都不符合逻辑?

1 个答案:

答案 0 :(得分:1)

    x**y * x**z = x**(y + z)

让我们证明

    x**y + x**z = (x * ...y times... * x) * (x * ...z times... * x) = 
    = (x * ...y+1 times... * x) * (x * ...z-1 times... * x) = 
    = ... = (x * ...y+z times... * x) = x**(y + z)

这就是为什么

    2**100 = 2**(20 + 80) = 2**20 * 2**80

所以,

    f(2**100) = f(2**20) * 2**80 = 0.24478681215692052 * 0.24478681215692052 =
    = 2.9592909751765742e+23 seconds