貪心算法——任務安排

給定一臺有m個儲存空間的單進程機器;

現有n個 請求:第i個請求計算時需要佔用R[i]個空間,計算完成後,儲存計算結果需要佔用O[i]個空間(其中O[i]<R[i])。問如何安排

這n個請求的順序,使得所有請求都能完成。

如:m=14,n=2,R[1,2]=[10,8],O[1,2]=[5,6]。可以先運行第一個任務,計算時佔用10個空間,計算完成後佔用5個空間,剩餘9個空間執行第二個任務;但如果先運行第 二個任務,則計算完成後僅剩餘8個空間,第一個任務的 計算空間就不夠了。

 

從題意,我們可以分析出,第k個元素的運算空間 + 前k個元素的所用儲存空間越小越好

我們考察兩種情況,

O1 + O2 + O3.... +Oj  ... + Ok-1 + Rk (1)

O1 + O2 + O3.... +Ok ... + OR-1 + Rj  (2)

假設(1)是小的那個。 那麼一定有Oj + Rk <= Ok + Rj。 從而 Rk - Ok <= Rj - Oj 

得出結論,Rj - Oj大,所以j任務要先於k任務被處理。

因此,所有任務根據相應的 R - O 降序排序,就是任務處理的先後順序

 

總結套路:題目比較簡單,但總結也是有點東西的 。我們想知道全局的任務最佳排序方案,先定位到兩個任務,看這兩個任務先後順序怎麼拍更有利於全局,再把這種規則推廣至全局。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章