演算法作業 批處理作業排程 回溯 分支限界法

2021-08-09 15:57:32 字數 2270 閱讀 5430

問題描述

給定 n 個作業的集合 j = 。每乙個作業 j[i] 都有兩項任務分別在兩台機器上完成。每乙個作業必須先由機器1 處理,然後由機器2處理。作業 j[i] 需要機器 j 的處理時間為 t[j][i] ,其中i = 1, 2, …, n, j = 1, 2。對於乙個確定的作業 排程,設f[j][i]是作業 i 在機器 j 上的完成處理的時間。所有作 業在機器2上完成處理的時間之和 f = sigma f[2][i] 稱為該作業 排程的完成時間之和。

批處理作業排程問題要求對於給定的 n 個作業,制定最佳作業排程 方案,使其完成時間和達到最小。

tji 機器1 機器2

作業1 2 1

作業2 3 1

作業3 2 3

這3個作業的6種可能的排程方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;

它們所相應的完成時間和分別是19,18,20,21,19,19。易見,最佳排程方案是1,3,2,其完成時間和為18。

以1,2,3為例:

作業1在機器1上完成的時間為2,在機器2上完成的時間為3

作業2在機器1上完成的時間為5,在機器2上完成的時間為6

作業3在機器1上完成的時間為7,在機器2上完成的時間為10

3+6+10=19,所以是19

1,3,2

作業1在機器1上完成的時間為2, 在機器2上完成的時間為3

作業3在機器1上完成的時間為4,在機器2上完成的時間為7

作業2在機器1上完成的時間為7,在機器2上完成的時間為8

3+7+8=18,所以時間和為18

思路:1 就是用回溯算出所有的狀態。當然可以剪一下值,就是當前算出來的值大於目標時,就不用再繼續了。我是直接列舉全排列算的。排列樹?? qwq 不太清楚。

第二個用的廣搜寫的。其實用佇列也行,用優先佇列沒有啥必要。。

只是為了熟悉一下。

還有乙個地方,那就是這個如果要加狀態的時候,還要學習第乙個加乙個vector,我沒有加。

#include 

using

namespace

std;

/* 用優先佇列搞一下。但是這樣寫狀態有點多。。

用位運算寫,比較方便。但是只能表示64個機器。注意!

分支限界qwq

*/typedef

long

long ll;

const

int maxn=1e5;

struct ednode[maxn];

struct node

friend

bool

operator

<(node a,node b)

};priority_queueq;

int main()

ll ans=1e17;

while(!q.empty())

for(int i=0;iif((u.status&(1

<0)}}

printf("%lld\n",ans);

}return

0;}

#include 

using

namespace

std;

typedef

long

long ll;

/* 批處理作業排程。

記錄乙個結尾時間。

這樣寫不方便剪枝。可以把vector傳參傳過去。

dfs。

*/const

int maxn=1e5;

ll ans;

ll sum[maxn];

bool vis[maxn];

vector

v;vector

vv;int m;

struct nodenode[maxn];

int siz;

void dfs(int x)

for(int i=0;icout

all)

for(int i=1;i<=m;i++)

}return ;

}int main()

dfs(0);

printf("最後的結果qwq\n");

for(int i=0;iif(i==0)

printf("%d",vv[i]);

else

printf(" %d",vv[i]);

}puts("");

printf("%lld\n",ans);

}return

0;}

回溯法 批處理作業排程 回溯演算法 批處理作業排程

成為該作業排程的完成時間和。批處理作業排程問題要求對於給定的 n個作業 制定乙個最佳的作業排程方案 使其完成時間和達到最小。批處理作業排程問題的乙個常見例子是在計算機系統中完成一批 n個作業,每個作業都要完成先計算,然 後將計算機結果列印輸出這兩項任務 計算任務由計算機的 處理器完成 列印輸出任務由...

回溯法 批處理作業排程 回溯法 批處理作業排程

問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...

批處理作業排程(回溯)

一 題目描述 給定n個作業的集合j j1,j2,jn 每個作業j都有兩項任務分別在兩台機器上完成。每個作業必須先由機器1處理,再由機器2處理。作業i需要機器j的處理時間為tji i 1,2,n j 1,2 對於乙個確定的作業排程,設fji是作業i在機器j上完成處理的時間,則所有作業在機器2上完成處理...