最佳排程問題 回溯法

2021-10-01 06:24:49 字數 1165 閱讀 8475

問題描述

假設有n個任務由k個可並行工作的機器來完成。完成任務i需要的時間為ti。試設計乙個演算法找出完成這n個任務的最佳排程,使得完成全部任務的時間最早。

輸入

7 3

2 14 4 16 6 5 3

輸出
思路:

使用回溯法的演算法框架,回溯法我認為就是深度優先搜尋+選擇+剪枝的乙個過程。

待會注意看這裡,mt 陣列表示每個機器需要執行的時間,初始也就是0

mt[i]

+=arr_task[task];if

(mt[i]

//剪枝,因為如果該機器的要執行的時間已經大於當前最優時間,就不用繼續遞迴了,

//因為已經不可能是最優的了

mt[i]

-=arr_task[task]

;

先讓這個機器執行這個任務(先遍歷樹的左節點),然後以此為條件進行下乙個任務的遞迴(繼續遍歷),同時再恢復狀態(回溯),這樣可以把所有的可能都覆蓋到。

c++ **

#include

#include

#define n 100

using

namespace std;

//n表示任務數 k表示機器數

int n,k;

//用於儲存每個任務的執行時間

int arr_task[n]

;//用於儲存每個機器執行完任務需要的時間,預設是0

int mt[n]

;//最優值

int besttime=

100000

;//獲取這三個機器的最大需要執行時間,也就是看看這三颱什麼時候都結束

intgetmaxtime

(int mt)

}return maxtime;

}void

backtrack

(int task)

}else

mt[i]

-=arr_task[task];}

}}intmain()

backtrack(0

);cout << besttime << endl;

return0;

}

回溯法 最佳排程問題

一 題目要求 設有n個任務由k個可並行工作的機器來完成,完成任務i需要時間為。試設計乙個演算法找出完成這n個任務的最佳排程,使完成全部任務的時間最早。二 演算法設計與分析 該演算法可抽象為子集樹回溯演算法,針對特定的任務數和機器數定 空間,對於n個任務和k個機器,解編碼 x1,x2,xn xi表示給...

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

問題 假設有 n 個任務由 k 個可並行工作的機器來完成。完成任務 i 需要時間為ti 設計完成這 n 個任務的最佳排程演算法,使得完成全部任務的時間最早。演算法設計 從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。按照回溯法搜尋排列樹的演算法框架,設開始時t...

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

問題 假設有 n 個任務由 k 個可並行工作的機器來完成。完成任務 i 需要時間為ti 設計完成這 n 個任務的最佳排程演算法,使得完成全部任務的時間最早。演算法設計 從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。按照回溯法搜尋排列樹的演算法框架,設開始時t...