2014-07-21 43 views
-1

我在写一个非常简单的程序来计算一个数的阶乘。与Python不同的运行时间

这:

import time 
def factorial1(n): 
    fattoriale = 1 
    while (n > 0): 
     fattoriale = fattoriale * n 
     n = n - 1 
    return fattoriale 

start_time = time.clock() 
factorial1(v) 
print float(time.clock() - start_time), "seconds" 

奇怪点(我)是在执行时间项的结果(上的值):

1°运行:0.000301秒

2°运行:0.000430秒

3°运行:0.000278秒

为什么你认为它是如此可变? 它与浮点型逼近有关吗?

谢谢,詹安卡

+0

你正在运行哪个操作系统? –

回答

1

在基于Unix的系统上,time.clock返回CPU时间,而不是挂钟时间。

您的程序是确定性的(即使是打印),并且在理想的系统上应该始终运行相同的时间量。我相信在你的测试中你的程序中断了,并且执行了一些中断处理程序,或者调度程序暂停了你的进程,并让CPU进入其他进程。当你的进程被允许再次运行时,CPU缓存可能已经被其他进程填充了,所以处理器需要再次将你的代码从内存加载到缓存中。这需要很少的时间 - 你在测试中看到的。

对于程序运行速度的好的量化,您应该考虑不调用阶乘1而只是数千次(或使用更大的输入值)。当您的程序运行多秒时,调度效果的影响会比测试时间少于一毫秒的测试更少(相对)。

1

它可能有很多与共享资源。如果程序作为一个单独的进程运行,它可能必须同时使用CPU和RAM等资源来争夺计算机上运行的其他进程。这些资源也被其他进程使用,因此按并发条件“获取”它们将需要不定时间,特别是如果有一些高优先级进程与其并行运行,而其他事件(如interupt)可能具有更高的优先级。

至于你的想法,据我所知,近似过程不应该采用可变时间,因为它运行确定性算法。然而,近似过程可能不得不争夺资源。

+0

在基于Unix的系统上,time.clock返回CPU时间,而不是挂钟时间。 –

相关问题