問題:假設有 n 個任務由 k 個可並行工作的機器來完成。完成任務 i 需要時間為ti ,設計完成這 n 個任務的最佳排程演算法,使得完成全部任務的時間最早。
演算法設計:
從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。按照回溯法搜尋排列樹的演算法框架,設開始時t=[1,2, ... , n]是所給的n個作業的完成時間,則相應的排列樹由t[1:n]的所有排列構成。
陣列len用於儲存一組空間解,
comp()函式用於計算乙個完整排程的完成時間,search()函式用來做搜尋,best記錄相應的當前最佳作業排程完成時間。
當dep>n時,演算法搜尋至葉子結點,得到乙個新的作業排程方案。此時演算法適時更新當前最優值和相應的當前最佳排程。
當dep向第(n-2)層回溯,以深度優先方式遞迴的對相應的子樹進行搜尋,對不滿足上界約束的結點,則剪去相應的子樹向第(n-2)層回溯。
#includeint n=7,k=3,best=66666;
int len[99];
int t[99]=;
int comp()
void search(int dep,int *len,int *t){
if(dep==n) {
int tmp=comp();
if(tmp
演算法 回溯法解決最佳排程問題
問題 假設有 n 個任務由 k 個可並行工作的機器來完成。完成任務 i 需要時間為ti 設計完成這 n 個任務的最佳排程演算法,使得完成全部任務的時間最早。演算法設計 從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。按照回溯法搜尋排列樹的演算法框架,設開始時t...
回溯法 最佳排程問題
一 題目要求 設有n個任務由k個可並行工作的機器來完成,完成任務i需要時間為。試設計乙個演算法找出完成這n個任務的最佳排程,使完成全部任務的時間最早。二 演算法設計與分析 該演算法可抽象為子集樹回溯演算法,針對特定的任務數和機器數定 空間,對於n個任務和k個機器,解編碼 x1,x2,xn xi表示給...
最佳排程問題 回溯法
問題描述 假設有n個任務由k個可並行工作的機器來完成。完成任務i需要的時間為ti。試設計乙個演算法找出完成這n個任務的最佳排程,使得完成全部任務的時間最早。輸入7 3 2 14 4 16 6 5 3 輸出思路 使用回溯法的演算法框架,回溯法我認為就是深度優先搜尋 選擇 剪枝的乙個過程。待會注意看這裡...