執行任務處理(有一臺機器,上面有m個儲存空間。然後有n個請求,第i個請求計算時需要佔 R[i]個空間,儲存計算結果則需要佔據O[i]個空間)

      有一臺機器,上面有m個儲存空間。然後有n個請求,第i個請求計算時需要佔 R[i]個空間,儲存計算結果則需要佔據O[i]個空間(據O[i]個空間(其中O[i]<R[i])。問怎麼安排這n個請求的順序,使得所有請求都能完成。你的算法也應該能夠判斷出無論如何都不能處理完的情況。比方說,m=14,n=2,R[1]=10,O[1]=5,R[2]=8,O[2]=6。在這個例子中,我們可以先運行第一個任務,剩餘9個單位的空間足夠執行第二個任務;但如果先走第二個任務,第一個任務執行時空間就不夠了,因爲10>14-6。


解題思路:

     可以先把O數組所有數相加,判斷最後存儲空間能不能存下所有計算結果,如果可以繼續。

     我們調配的過程應該是讓那些需要計算空間大的任務先執行,這樣可以儘可能的先滿足他,然後我們應該按讓存儲結果佔用空間小的先執行,這樣剩下的空間儘可能的大了,後面的任務執行的執行就有相對較大的空間了。

     總結就是按照R[i]-O[i]的值從大到小排序,然後從大到小依次執行即可,如果中間沒法滿足R或者O則任務不能處理完成。

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