在單處理器上具備期限和懲罰的單位時間任務調度問題。算法
任務調度問題就是給定一個有窮單位時間任務的集合S,集合S中的每一個任務都有一個截止期限di和超時懲罰wi,須要找出集合S的一個調度,使得因任務誤期所致使的總懲罰最小,這個調度也稱爲S的一個最優調度。.net
實現任務的最優調度主要就是利用貪心算法中擬陣的思想。若是S是一個帶期限的單位時間任務的集合,且I是全部獨立的任務集構成的結合,則對應的系統M=(S,I)是一個擬陣。利用擬陣解決任務調度問題的算法原理主要就是將最小化遲任務的懲罰之和問題轉化爲最大化早任務的懲罰之和的問題,也就是說在任務調度的時候優先選擇當前任務序列中懲罰最大的任務。這裏,假設集合A存聽任務的一個調度。若是存在關於A中任務的一個調度,使得沒有一個任務是遲的,稱任務集合A是獨立的。實現該問題的貪心算法以下:排序
A <- Ø原理
Sort S[M] into monotonically decreasing order by w循環
for each x∈S[M]下載
do if AU{x} ∈ I[M]im
then A <- AU{x}call
初始時A爲空集,而後對S中的全部任務按懲罰大小降序排序,而後進入循環。循環的過程當中依次訪問S的中全部任務,而後進行獨立性檢查,若是當前任務x加入集合A以後A依然是獨立的,則將A置爲AU{x},不然檢查下一個任務直到掃描結束,最後所獲得的集合A便是一個最優子集,而後進行相應的調整獲得最後的輸出。d3
(1)任務調度問題的輸入:數據
a) 任務的數量n,即表示當前任務集合S={a1,a2,a3……an};
b) n個任務的期限d1,d2,d3……dn,每一個任務的di知足1≤ di ≤n,且任
務要求ai在di以前完成;
c) n個任務的權(懲罰)w1,w2,w3……wn。表示任務ai若是沒在時間di
以前完成,則致使懲罰wi,若是任務在期限以前完成,則沒有懲罰; 同時在本實驗中,還會將每一個wi值替換爲max{w1,w2,w3……wn}-wi,並運行算法進行第二次實驗,而後比較兩次實驗所得結果。
在本次實驗中,n取值爲7,每一個任務的期限爲4,2,4,3,1,4,6,對應的懲罰爲70,60,50,40,30,20,10。
(2)任務調度問題的輸出:
a) 貪心算法所選的任務以及放棄的任務,所選的任務即表示最終會在期限
內完成的任務。放棄的任務表示最終會因誤期而受到懲罰的任務。
b) 最終的最優調度序列
c) 最優調度所帶來的總的懲罰數
下載連接:http://download.csdn.net/detail/zhh1992/8359281