基础算法 —— 调度问题 —— 多机并行调度问题
生活随笔
收集整理的這篇文章主要介紹了
基础算法 —— 调度问题 —— 多机并行调度问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【概述】
多機(jī)調(diào)度問(wèn)題可表達(dá)為:n 個(gè)工件由 k 個(gè)可并行工作的機(jī)器加工,完成任務(wù) i 需要的時(shí)間為 ti,調(diào)度目標(biāo)是確定這 n 個(gè)工件完成的最佳加工順序,使得完成全部任務(wù)的時(shí)間最早,其可利用 回溯法 來(lái)求解
【問(wèn)題分析】
問(wèn)題實(shí)質(zhì)是要從 n 個(gè)作業(yè)中找出有最小完成時(shí)間和的作業(yè)調(diào)度,因此批處理作業(yè)調(diào)度問(wèn)題的解空間是一棵排列樹(shù)。
開(kāi)始時(shí),所給的 t[n] 為 n 個(gè)作業(yè)的完成時(shí)間,則相應(yīng)的排列樹(shù)由 t[1:n] 的所有排列構(gòu)成
用數(shù)組 len[n] 存儲(chǔ)一組空間解,getTime() 計(jì)算一個(gè)完整調(diào)度的完成時(shí)間,res 記錄當(dāng)前最佳調(diào)度的完成時(shí)間
在進(jìn)行搜索時(shí),從第一個(gè)任務(wù)開(kāi)始,對(duì)樹(shù)的深度進(jìn)行遞歸:
- 當(dāng) deep=n 時(shí),搜索至葉結(jié)點(diǎn),得到一個(gè)新的作業(yè)調(diào)度方案,此時(shí)更新最優(yōu)值與相應(yīng)的最佳調(diào)度
- 當(dāng) deep<n 時(shí),若當(dāng)前擴(kuò)展結(jié)點(diǎn)位于排列樹(shù)的第 n-1 層,說(shuō)明需要對(duì)下一個(gè)要安排的作業(yè)進(jìn)行搜索,并向第 n-2 層回溯,從而對(duì)相應(yīng)子樹(shù)進(jìn)行搜索
【實(shí)現(xiàn)】
int n,k; int t[N]; int len[N]; int res=INF; int getTime() {int temp=0;for(int i=0; i<k; i++)temp=max(len[i],temp);return temp; } void dfs(int deep) {if(deep==n) {int temp=getTime();res=min(res,temp);return;}for(int i=0; i<k; i++) {len[i]+=t[deep];if(len[i]<res)dfs(deep+1);len[i]-=t[deep];} } int main() {scanf("%d%d",&n,&k);for(int i=0; i<n; i++)scanf("%d",&t[i]);dfs(0);printf("%d\n",res);return 0; }?
總結(jié)
以上是生活随笔為你收集整理的基础算法 —— 调度问题 —— 多机并行调度问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算几何 —— 二维几何基础 —— 三角
- 下一篇: 信息学奥赛一本通(1015:计算并联电阻