1. 程式人生 > >獨立任務最優排程(雙機排程)問題

獨立任務最優排程(雙機排程)問題

    用兩臺處理機AABB處理nn個作業。設AABB處理第kk個作業的時間分別為aka_kbkb_k。由於各個作業的特點和機器效能的關係,對某些作業,在AA上的處理時間長;而對另一些作業,在BB上的處理時間更長。一臺處理機在某個時刻只能處理一個作業,而且作業處理是不可中斷的,每個作業只能被處理一次。現在要找出一個最優排程方案,使得nn個作業被這兩臺處理機處理完畢的時間和最少。

    本題是一個獨立任務最優排程問題,也被稱為雙機排程問題,可以利用動態規劃的思想解決。當完成kk個作業時,設機器AA花費了xx時間,機器BB花費時間的最小值肯定是xx的一個函式。設F

[k,x]F[k, x]表示完成k個作業且機器AA花費xx時間的條件下機器BB所花費時間的最小值,那麼F[k,x]=min{F[k1,x]+bk,F[k1,xak]}F[k, x] = min\{F[k-1, x] + b_k, F[k-1, x-a_k]\}。其中F[k1,x]+bkF[k-1, x] + b_k表示第k個作業由機器B來處理,完成前k1k-1個作業時機器AA所花費的時間還是xx。而F[k1,xak]F[k-1,x-a_k]表示第kk個作業由機器AA來處理,此時完成前k1k-1個作業機器A花費的時間是xakx-a_k

    根據FF的定義,我們知道F[n,x]F[n, x]表示完成nn個作業且機器AA花費xx時間的條件下機器BB所花費時間的最小值。顯然,0xk=0nak0 \le x \le \sum\limits_{k = 0}^{n}a_k,所以對於xi(x_i(區間[0,k=0nak][0, \sum\limits_{k = 0}^{n}a_k]內的任一整數)),總有一個F[n,xi]F[n, x_i]

[n,xi]與其對應,那麼min{max{xi,F[n,xi]}}min\left\{max\{x_i, F[n, x_i]\}\right\}就是最後的結果。由於要處理每個作業kk,並且處理每個作業kk的時候都要迴圈j=0kaj\sum\limits_{j = 0}^{k}a_j次,所以演算法的時間複雜度為O(nk=0nak)O(n\sum\limits_{k = 0}^{n}a_k)

    考慮以下包含66個作業的例子,其中ak={2,5,7,10,5,2}a_k=\{2,5,7,10,5,2\},而bk={3,8,4,11,3,4}b_k=\{3,8,4,11,3,4\}。下面對前兩個作業進行簡單的分析。

作業1 作業2 作業3 作業4 作業5 作業6
處理機A 2 5 7 10 5 2
處理機B 3 8 4 11 3 4

    對於第一個作業,機器$A$所花費時間$x$的取值範圍是$0 \le x \le a_1$。當$x\lt0$時,設$F[1,x] = \infty$。$x=0$時,$F[1,0]=3$,此時$max(0,F[1,0])=3$,即機器$A$花費$0$時間,機器$B$花費$3$時間;$x=1$時,$F[1,1]=3$,$max(1,F[1,1])=3$;$x=2$時,$F[1,2]=0$,$max(2,F[1,2])=2$,此時作業$1$由機器$A$來處理,花費$2$時間,而機器$B$不處理作業。

    對於第二個作業,xx的取值範圍是0xa1+a20 \le x \le a_1 + a_2。當x<0x\lt 0時,同樣設F[2,x]=F[2,x] = \infty
    x=0x=0F[2,0]=min{F[1,0]+b2,F[1,0a2]}=min{3+8,}=11F[2,0]=min\{F[1,0]+b_2,F[1,0-a_2]\}=min\{3+8,\infty\}=11,所以max(0,11)=11max(0,11)=11
    x=1x=1F[2,1]=min{F[1,1]+b2,F[1,1a2]}=min{3+8,}=11F[2,1]=min\{F[1,1]+b_2,F[1,1-a_2]\}=min\{3+8,\infty\}=11,所以max(1,11)=11max(1,11)=11
    x=2x=2F[2,2]=min{F[1,2]+b2,F[1,2a2]}=min{0+8,}=8F[2,2]=min\{F[1,2]+b_2,F[1,2-a_2]\}=min\{0+8,\infty\}=8,所以max(2,8)=8max(2,8)=8
    x=3x=3F[2,3]=min{F[1,3]+b2,F[1,3a2]}=min{0+8,}=8F[2,3]=min\{F[1,3]+b_2,F[1,3-a_2]\}=min\{0+8,\infty\}=8,所以max(3,8)=8max(3,8)=8
    x=4x=4F[2,4]=min{F[1,4]+b2,F[1,4a2]}=min{0+8,}=8F[2,4]=min\{F[1,4]+b_2,F[1,4-a_2]\}=min\{0+8,\infty\}=8,所以max(4,8)=8max(4,8)=8
    x=5x=5F[2,5]=min{F[1,5]+b2,F[1,5a2]}=min{0+8,3}=3F[2,5]=min\{F[1,5]+b_2,F[1,5-a_2]\}=min\{0+8,3\}=3,所以max(5,3)=5max(5,3)=5

相關推薦

獨立任務排程排程問題

    用兩臺處理機AAA和BBB處理nnn個作業。設AAA和BBB處理第kkk個作業的時間分別為aka_kak​和bkb_kbk​。由於各個作業的特點和機器效能的關係,對某些作業,在AAA上的處理時間長;而對另一些作業,在BBB上的處理時間更長。一臺處理機在某

【貪心】加工生產排程排程貪心問題

問題 D: 【貪心】加工生產排程 時間限制: 1 Sec  記憶體限制: 64 MB 提交: 41  解決: 21 [提交] [狀態] [討論版] [命題人:外部匯入] 題目描述 有n個部件需在A、B機器上加工,每個工件都必須經過先A後B兩道工序。 已知:部件i在A

獨立任務排程動態規劃

題目: 用兩臺處理機A和B處理n個作業。設A和B處理第k個作業的時間分別為ak和bk。由於各個作業的特點和機器效能的關係,對某些作業,在A上的處理時間長;而對另一些作業,在B上的處理時間更長。一臺

動態規劃之獨立任務排程問題 問題描述

1.問題描述 用2 臺處理機A 和B 處理n個作業。設第i 個作業交給機器A 處理時需要時間ai,若由機器B來處理,則需要時間bi。由於各作業的特點和機器的效能關係,很可能對於某些i,有ai>=bi,而對於某些j,j≠i,有aj<bj,既不能將一個作業分開由2 臺機器處理,也沒有一臺機器能同時處

王曉東 獨立任務排程問題

方法1: #include "stdio.h" #include "string.h" #define MX 10 #define MAX(a, b) ((a)>(b)?(a):(b)) #define MIN(a, b) ((a)<(b)?(a):(b))

獨立任務排程問題

問題:獨立任務最優排程,又稱雙機排程問題:用兩臺處理機A和B處理n個作業。設第i個作業交給機器A處理時所需要的時間是a[i],若由機器B來處理,則所需要的時間是b[i]。現在要求每個作業只能由一臺機器處理,每臺機器都不能同時處理兩個作業。設計一個動態規劃演算法,使得這兩

演算法_動態規劃_獨立任務排程問題

問題描述   用2 臺處理機A 和B 處理n個作業。設第i 個作業交給機器A 處理時需要時間ai,若由機器B來處理,則需要時間bi。由於各作業的特點和機器的效能關係,很可能對於某些i,有ai>=bi,而對於某些j,j≠i,有aj import java

南郵 OJ 1220 獨立任務排程問題

獨立任務最優排程問題 時間限制(普通/Java) : 1000 MS/ 3000 MS          執行記憶體限制 : 65536 KByte 總提交 : 164            測試通

獨立任務調度問題

can i++ 任務 ase turn ret n) ++ ber #include <stdio.h> int main() { int n; int *a, *b,*t; int i,k; int s

AOJ2249 短路+小花費權值

擴展 最小 col 滿足 fill 最短 題解 return queue 寫題解之前先罵一下這道題 xxx給數據範圍點數<1e4,邊數<2e4,結果我開2e4和3e4都RE,然後找問題一個多小時,最後我開了1e5和2e5,題面太能唬人了吧!?真是sb題面 ---

poj 2751 排程問題Johnson演算法貪心

題意: 2臺機器,n件任務,每件任務必須先在S1上做,再在S2上做。任務之間先做後做任意。求最早的完工時間。 分析:         這是一個經典問題:2臺機器的情況下有多項式演算法(Johnson演算法),3臺或以上的機器是NP-hard的。Johnson演算法思想就是貪

OBST二叉搜索樹

紅黑樹 std 變量 這樣的 最優二叉搜索樹 earch 操作 問題 問題:   簡述一下問題:假設有一顆詞典二叉樹,我們從中查找需要的單詞,使用紅黑樹或平衡樹這樣的數據結構總是可以在O(lgN)時間內進行查找,但單詞的出現頻率是不同的,我們給每個單詞加上一個搜索概率,然後

noip 2009 貿易短路+反向長路

輸出 main 路線 ins 城市 mes 部分 cst don 題目描述 C 國有 n 個大城市和 m 條道路,每條道路連接這 n 個城市中的某兩個城市。任意兩個城市之間最多只有一條道路直接相連。這 m 條道路中有一部分為單向通行的道路,一部分為雙向通行的道路,雙向通行

leetcode35題:搜索插入位置不是解法,僅供參考

重復 mce 僅供參考 sea elf () 參考 lis 位置 給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。你可以假設數組中無重復元素。 示例 1:輸入: [1,3,5,6], 5輸出: 2示例

Haproxy+Keepalived熱備搭建高可用web架構

ise mark 高可用web keepalive email protocol rip 火墻 詳情 1、目的搭建web高可用架構,用haproxy作為前段負載均衡分攤後端web服務器壓力,Keepalived保證haproxy的存活(雙機熱備:一臺haproxy掛了,自動

【洛谷 P1073】 貿易 Tarjan縮點+拓撲排序

多行 stdout sin pre lin get tar getchar || 題目鏈接 先\(Tarjan\)縮點,記錄每個環內的最大值和最小值。 然後跑拓撲排序,\(Min[u]\)表示到\(u\)的最小值,\(ans[u]\)表示到\(u\)的答案,\(Min\)和

控制泛函

LQR (linear quadratic regulator)即線性二次型調節器,其物件是現代控制理論中以狀態空間形式給出的線性系統,而目標函式為物件狀態和控制輸入的二次型函式。 LQR 的直觀推導及簡單應用            &

CCF灌溉模板題

第一種是prim演算法 但是有點坑 #include<iostream> using namespace std; typedef long long ll; ll arc[1010][1010]; const ll inf=0x3f3f3f3f; int n,e; ll pri

ccf歷年第四題java解答之-201412-4-灌溉100分

使用kruskal求解,耗時943ms,得分100 徘徊在超時的邊緣,同樣的程式碼,有時候提交是100分,有時候是超時90分,還有時候是超時80分== import java.util.ArrayList; import java.util.Collections; import jav

keepalived熱備深度解析

以下內容為親自研究得出的結果: 雙機熱備切換時間: 主機interval*主機fail+檢測時間(檢測指令碼執行時間)與備機interval*備機rise+檢測時間(檢測指令碼執行時間)中較大的那個