首页 > 请教一个根据时间平均划分请求的计算方法

请教一个根据时间平均划分请求的计算方法

问题很简单:

这个不难,那如果说:


把累积的小数误差体现在后面的计算中即可消灭最后的累积误差。

也就是说每次使用“剩余时间”和“剩余次数”而非“总时间”和“总次数”来计算,这样每次向下取整,剩余时间就会变多一些,后面就更倾向于向上取整一些,反之亦然。误差会在不超过正负1的区间内摇摆而不会累积


def scheduleRequest(reqCount, time = 3600): result = [] remainTime = time for i in xrange(0, reqCount): t = round(remainTime / (reqCount - i)) if(len(result) > 0): result.append(result[-1] + t) else: result.append(t) remainTime -= t return result print(scheduleRequest(11)) print(scheduleRequest(12)) print(scheduleRequest(13)) print(scheduleRequest(73, 36))

结果(最后那个请求次数超过时间两倍的例子,为了展示方便缩减为36秒)

[327.0, 654.0, 981.0, 1308.0, 1635.0, 1963.0, 2290.0, 2618.0, 2945.0, 3273.0, 3600.0]
[300.0, 600.0, 900.0, 1200.0, 1500.0, 1800.0, 2100.0, 2400.0, 2700.0, 3000.0, 3300.0, 3600.0]
[276.0, 553.0, 830.0, 1107.0, 1384.0, 1661.0, 1938.0, 2215.0, 2492.0, 2769.0, 3046.0, 3323.0, 3600.0]
[0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0, 17.0, 18.0, 18.0, 19.0, 19.0, 20.0, 20.0, 21.0, 21.0, 22.0, 22.0, 23.0, 23.0, 24.0, 24.0, 25.0, 25.0, 26.0, 26.0, 27.0, 27.0, 28.0, 28.0, 29.0, 29.0, 30.0, 30.0, 31.0, 31.0, 32.0, 32.0, 33.0, 33.0, 34.0, 34.0, 35.0, 35.0, 36.0, 36.0]

【热门文章】
【热门文章】