前置知識
可以參見:擬陣的有關知識,圖擬陣。
問題描述
輸入:
輸出:
轉換為加權擬陣上尋找優化子集問題
定義1,設s是乙個任務排程.乙個任務在s中是遲的,如果它在規定的期限之後完成; 否則,該任務是早的.。
定義2,如果在乙個任務排程中, 早任務總是排列於遲任務之前, 則稱該排程具有早任務優先形式。
命題1,該問題存在早任務優先形式的優化解。
證明1:如果該問題不存在早任務優先形式的優化解。那麼,可以將排列較前的遲任務與排列較後的早任務進行換位,這並不會影響對於該任務遲早的分類,因為,遲任務的執行只能更遲,早任務的執行只能更早。
定義3,如果乙個排程具有早任務優先形式而且按期限單調遞增順序執行各任務, 則稱該排程具有規範化形式。
命題2,問題存在規範化形式的優化解。
證明2,證明型別同證明1,同樣交換位置,不會改邊任務的遲早分類。
以上的定義以及命題給出了s的優化解的形式說明,說明該問題可以轉換為尋找早任務集合的問題,一旦早任務集合被確定,可以構造出滿足條件的原問題的解,即:規範化形式+遲任務任意排序。
定義4,任務集合a稱為獨立的,如果存在乙個關於a的排程, 使得a中的任務皆非遲任務。
定義5,用nt(a)表示a中期限小於等於t的任務數,而t有一層含義是t內可以執行的任務數,若nt(a) ≤ t,則這幾個任務都可以在期限之前被執行。
引理1,對於任何任務集合a, 下邊的命題等價:
a是獨立集合。
對於t=1, 2, …, n, nt(a) ≤ t。
如果按照期限遞增順序排程a中任務, 則a中無遲任務。
證明3,
定理1,若s是乙個帶期限的單位時間任務的集合, 且i為所有獨立任務集構成的集族, 則m=(s, i)是 乙個擬陣。
證明:
於是, b中包含了比a中更多的具有期限k+1的任務. 設 x∈b-a, x具有期限k+1. 令a'=au. 往證a'獨立。
對於1 ≤ t ≤ k, nt(a')=nt(a) ≤ t, 因為a是獨立的。
對於k < t ≤ n, nt(a') ≤ nt(b) ≤ t, 因為b是獨立的。
於是, a』是獨立的。
原問題轉換為:
輸入:擬陣 m=(s, i), m的加權函式 w.
輸出:m的最優子集。
演算法
直接呼叫演算法即可,對於i只需要增加判斷條件就行,沒必要求出i,只需要判斷是否獨立就可以,具體參見:擬陣的最優子集問題的演算法。
問題 A 任務排程
題目描述 讀入任務排程序列,輸出n個任務適合的一種排程方式。輸入輸入包含多組測試資料。每組第一行輸入乙個整數n n 100000 表示有n個任務。接下來n行,每行第乙個表示前序任務,括號中的任務為若干個後序任務,表示只有在前序任務完成的情況下,後序任務才能開始。若後序為null則表示無後繼任務。輸出...
任務排程問題
乙個單位時間任務是恰好需要乙個單位時間完成的任務。給定乙個單位時間任務的有限集s。關於s 的乙個時間表用於描述s 中單位時間任務的執行次序。時間表中第1 個任務從時間0 開始執行直至時間1 結束,第2 個任務從時間1 開始執行至時間2 結束,第n個任務從時間n 1 開始執行直至時間n結束。具有截止時...
排程機任務排程問題
題目描述 假設有乙個 排程機,有n個任務相同的任務需要排程到m臺伺服器上執行,由於每台伺服器的配置不一樣,因此,伺服器執行乙個任務所花費的時間也不同。現在假設第i個伺服器執行乙個任務需要的時間為t i 假如,有2個執行機a與b,執行乙個任務分別需要7min和10min,有6個任務待排程。如果平分這6...