演算法 回溯法解決最佳排程問題

2021-07-11 21:17:45 字數 730 閱讀 3350

問題:

假設有 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 輸出思路 使用回溯法的演算法框架,回溯法我認為就是深度優先搜尋 選擇 剪枝的乙個過程。待會注意看這裡...