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