计算程序中的估计时间

Calculate estimated time in a program

本文关键字:时间 计算程序      更新时间:2023-10-16

我正在编写一个程序,我想向用户提供有关每处理1000个元素的估计时间的信息。我是这样计算时间的:

  • C =已处理的元素
  • MAX =处理的最大元素数
  • Tp =时间流逝
  • Te =估计时间
理论上,已处理的元素与经过的时间之间的关系等于其余元素与剩余时间之间的关系,因此我的公式是:

(C/Tp) = (MAX - C)/(Te - Tp)

所以我需要求解通过执行:

(Te - Tp) = (MAX - C)Tp/C

最后:

Te = (MAX - C)Tp/C + Tp

我认为分辨率是正确的,但显然,随着CTp的增长,操作并不趋于0,所以我确信我在做一个愚蠢的错误,但我找不到。

有什么好主意吗?

我认为你的初始方程有点偏离,而不是你应该有的

(C/Tp) = (MAX - C)/Te

,因为我们估计处理每个项目所需的时间,这应该是恒定的,在过去和未来相等。这将给你一个最终的方程

Te = (MAX - C)*(Tp/C)

,如预期的那样趋向于零。

(假设Te剩余的估计时间,而不是估计的总时间)

我觉得很好。你可能会想到"剩余时间",在你的例子中是Tr = Te - Tp。那个趋向于0

Start: C = 0,结果除以0。有道理,你没有速度指示,所以没有估计。

End: C= MAX, MAX-C=0,所以Te=Tp。有意义,估计现在等于运行时间。

中途,C=MAX/2, MAX-C =C,所以Te=C*Tp/C + Tp,或者大约是当前通过量的两倍。是有意义的。

四分之一,C= MAX/4, MAX-C=3*C,则Te=3*C*Tp/C + Tp,或Te= 4*Tp。又说得通了

您不应该占用整个时间。

你应该取1000个对象的最后4-5块的平均值。因为这样可以让你更准确地了解当前的计算速度。

t1,t2,t3,t4 = last 4 calculations
thisIteration = timePassedSinceLastCheck/1000 //Avg time per object
Te = (Max-C)*Avg(t1,t2,t3,t4,thisIteration)