我正在制作一个程序,我想向用户提供有关每1000个元素处理的估计时间的信息。我正以这种方式计算时间:
理论上,处理元素和经过时间之间的关系等于其余元素与其余时间之间的关系,所以我的公式是:
(C / Tp)=(MAX-C)/(Te-Tp)
所以我需要通过以下方式解决 Te :
(Te-Tp)=(MAX-C)Tp / C
最后:
Te =(MAX-C)Tp / C + Tp
我认为这个解决方案是正确的但很明显,操作不会倾向于0,因为 C 和 Tp 增长,所以我确信我正在做愚蠢的错误,但我找不到。
请问一些想法?
答案 0 :(得分:5)
我认为没关系。您可能正在考虑“剩余时间”,在您的情况下将是Tr = Te - Tp。那个确实倾向于0。
开始:C = 0,导致除以零。有道理,你没有速度指示,所以没有估计。
结束: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。再次有道理。
答案 1 :(得分:5)
我认为你的初始等式略有偏离,而不是你应该拥有的那个
(C/Tp) = (MAX - C)/Te
因为我们估计处理每个项目所需的时间,这在过去和未来应该是恒定的和平等的。这将为您提供最终的等式
Te = (MAX - C)*(Tp/C)
按预期趋于零。
(假设Te
是左的估计时间,而不是估计的总时间)
答案 2 :(得分:3)
你不应该花费整个时间。
你应该只取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)