2014-11-22 214 views
0

以下示例說明了我需要的內容。說下雨了,我在鎮上放了許多桶來收集水。我不知道他們填滿的速度,而且他們收集水的速度有所不同。我不想讓人溢出,因爲那時我失去了水。所以,如果我遇到桶並且已滿,我想很快再次訪問它,因爲它顯然會獲得更多的水。如果我來到一個桶,它不是很滿,我不想訪問它一段時間,但我最終確實。新近度是次要優先級的優先級隊列?

因此,讓我們說,當我訪問一個桶時,我會得到兩條信息。它有多滿(0到1之間),以及當前時間(自POSIX時代以來的時間)。

我不是在尋找最佳答案(最佳指的是解決方案,而不是算法)。我只是在尋找一個簡單的解決方案,可能是基於堆的,比再次訪問之前天真地訪問每一桶更好。我想重新訪問更經常填充更快的桶。

我也不想無限期地忽視緩慢加油的桶,而過度參加快速加油桶。

由於

+0

你看桶的成本是多少?看着他們需要時間從你? – Lrrr 2014-11-22 14:14:02

+0

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

回答

2

保持含有每個桶,其中,鏡筒的優先級的估計時間在其將要填充的一個優先級隊列。以最早估計的填充時間反覆彈出桶,訪問它,並重新插入一個新的估計值。

有許多可以想象的方法來估計。一個簡單的方法是記住前兩次訪問桶和最後收集量併線性推斷。