双机调度问题算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解:设)(i T 为完成前i 个作业,系统所需的最短处理时间: ]}[],[max{)(i s i s i T b a = ][i S a 表示在完成前i 个作业所需时间最少的策略下,分配到A 机器上处理的作业的时间,][i S b 表示在完成前i 个作业所需时间最少的策略下,分配到B 机器上处理的作业的时间得到)(i T 的递推公式: }}]1[,]1[min{),1(max{)(i b i a b i S a i S i T i T +-+--=, 直接的关系式即是,

且 且 ⎪⎩⎪⎨⎧->+-+-<+-+-->+-+-<+-+--<++-=)1(]1[]1[]1[]1[)1(]1[]1[]1[]1[)1(},min{)1()(i T a i S b i S a i S a i S i T b i S a i S b i S b i S i T b S a S i T i T i a i b i a i a

i b i a i b i b i b i a 其中: , 得到其算法:

#include

#include

using namespace std;

#define N 100

int max(int a,int b){

if(a>=b) return a; else return b;

0]0[=a S 0]0[=b S

}

int min(int a,int b){

if(a

else return b;

}

int main(){

int a[N],b[N];

int n,i,sum_a,sum_b,T;

sum_a=0;

sum_b=0;

T=0;

cout<<"输入作业的个数:";

cin>>n;

cout<

cout<<"A单独完成任务的时间序列:";

for(i=1;i<=n;i++)

cin>>a[i-1];

cout<

cout<<"B单独完成任务的时间序列:";

for(i=1;i<=n;i++)

cin>>b[i-1];

cout<

for(i=1;i<=n;i++){

T=max(T,min(sum_a+a[i-1],sum_b+b[i-1]));

if(sum_a+a[i-1]>sum_b+b[i-1]) {sum_b+=b[i-1];cout<<"将任务"<

B做"<

else {sum_a+=a[i-1];cout<<"将任务"<

cout<<"总时间为:"<

return 0;

}

运算结果截图:

时间复杂度为O(n);

相关文档
最新文档