双机调度问题算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);