2

如果我知道 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 电脑,需要多长时间?你怎么做数学?

4

1 回答 1

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)
}
于 2013-09-02T01:05:15.967 回答