問:有個單線程任務,總內存M,處理N個請求,每一個請求運行時佔用Ri的內存空間,運行完後會佔用Oi的內存,請問按照怎麼的順序處理任務,能夠處理完全部的請求?線程
解:排序
假設最優順序是 1->N,那麼運行最後一個任務的時候內存狀態爲:內存
O1+O2+...+O(n-1) + Rn請求
再假設將最佳順序的最後一個任務Rn和Ri改變一下順序,那麼運行最後一個任務的時候內存狀態爲:
O1+O2+On+...+O(n-1)+ Ri
由於第一種狀況是假設順序最優,說明運行時佔用總內存最小,那麼就有:
(O1+O2+Oi+...+O(n-1) + Rn) <= (O1+O2+On+...+O(n-1)+ Ri )
銷掉同類項爲:
Oi + Rn <= On + Ri 交換得:
Rn - On <= Ri-Oi
由此可知:最佳的順序的要求是R-O的差值最小,既按Rx-Ox的差值由小到大排序後的順序就是執行的最佳順序。