貪心算法

問:有個單線程任務,總內存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的差值由小到大排序後的順序就是執行的最佳順序。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息