如何通过循环次数估算计算时间

时间:2013-09-02 00:22:22

标签: r algorithm

如果我知道R中的算法需要多少循环来完成任务,我怎么能估计计算时间呢?

这是一个例子:

length(vector_a); # 30000
length(vector_b); # 100000

for (i in vector_a) {
   for (j in vector_b) {
print("This is one loop")
   }
}

然后在完成工作之前我应该​​有30,000 * 100,000 = 3,000,000,000个循环。现在,如果我有一台带有4GB内存的2.6Ghz电脑需要多长时间?你怎么做数学?

1 个答案:

答案 0 :(得分:4)

如果任务在最后一个循环中与第一个循环中的任务大致相同(就像在你的例子中那样),你可以通过测量得到非常粗略估计。完成某些任务子集所需的时间,除以执行的总循环的分数。例如,

vector_a <- 1:10; # 30000
vector_b <- 1:10;

system.time(
  Rprof({
    for (i in vector_a) {
      for (j in vector_b) {
        print("This is one loop")
      }
    }
  })
  )

在我的机器上产生

  user  system elapsed 
 0.008   0.002   0.008 

如果我们这里的elapsed时间是最保守的,那么我们会获得0.008 / ((10*10)/(30000*100000)) = 240000秒。

然而,在最好的情况下,这是一个很差的近似值,如果计算是迭代的并且在每个循环上计算成本更高,那么将会很糟糕,例如在

for(i in 1:100) {
  factorial(i)
}