2014-11-22 226 views
0

以下示例说明了我需要的内容。说下雨了,我在镇上放了许多桶来收集水。我不知道他们填满的速度,而且他们收集水的速度有所不同。我不想让人溢出,因为那时我失去了水。所以,如果我遇到桶并且已满,我想很快再次访问它,因为它显然会获得更多的水。如果我来到一个桶,它不是很满,我不想访问它一段时间,但我最终确实。新近度是次要优先级的优先级队列?

因此,让我们说,当我访问一个桶时,我会得到两条信息。它有多满(0到1之间),以及当前时间(自POSIX时代以来的时间)。

我不是在寻找最佳答案(最佳指的是解决方案,而不是算法)。我只是在寻找一个简单的解决方案,可能是基于堆的,比再次访问之前天真地访问每一桶更好。我想重新访问更经常填充更快的桶。

我也不想无限期地忽视缓慢加油的桶,而过度参加快速加油桶。

由于

+0

你看桶的成本是多少?看着他们需要时间从你? – Lrrr 2014-11-22 14:14:02

+0

是的,有一个小的成本。看一个桶是一个稍微昂贵的I/O限制任务。 – user3391564 2014-11-22 20:54:55

回答

2

保持含有每个桶,其中,镜筒的优先级的估计时间在其将要填充的一个优先级队列。以最早估计的填充时间反复弹出桶,访问它,并重新插入一个新的估计值。

有许多可以想象的方法来估计。一个简单的方法是记住前两次访问桶和最后收集量并线性推断。