流水作业调度
时间:2022-04-22
本文章向大家介绍流水作业调度,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
流水作业调度问题 描述: N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。 M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在 机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。 可以假定任何任务一旦开始加工,就不允许被中断,直到该任务被完成,即非优先调度。 输入: 输入包含若干个用例,第一行为一个正整数K(1<=K<=1000),表示用例个数,接下来K个用例,每个用例第一个为作业数N(1<=N<=1000), 接下来N行,每行两个非负整数,分别表示在第一台机器和第二台机器上加工时间。 输出: 每个用例用一行输出采用最优调度所用的总时间,即从第一台机器开始到第二台机器结束的时间。 样例输入: 1 4 5 6 12 2 4 14 8 7 样例输出: 33
算法描述:
1 令N1={i | ai < bi},N2={i | ai>=bi}
2 将n1中作业按ai的非减排序,n2 作业按bi非增排序
3 构成满足Johnson法则的最优调度
#include <iostream>
#include <algorithm>
using namespace std;
class JOB
{
public:
int key,index;
bool job;
};
bool cmp(JOB a,JOB b)
{
return a.key<b.key;
}
int func(int n,int a[],int b[],int c[])
{
int i,j,k;
JOB *d =new JOB[n];
for(i=0;i<n;i++)
{
if(a[i]<b[i])
{
d[i].job =true;
d[i].key =a[i];
}
else
{
d[i].job=false;
d[i].key=b[i];
}
d[i].index=i;
}
sort(d,n+d,cmp);
j=0,k=n-1;
for(i=0;i<n;i++)
{
if(d[i].job ==true)
c[j++]=d[i].index;
else
c[k--]=d[i].index;
}
j=a[c[0]];
k=j+b[c[0]];
for(i=1;i<n;i++)
{
j=j+a[c[i]];
k= j<k ? k+b[c[i]] : j+b[c[i]] ;
}
delete d;
return k;
}
int main()
{
int i,n,m,a[100],b[100],c[100];
cin>>n;
while(n--)
{
cin>>m;
for(i=0;i<m;i++)
{
cin>>a[i];
cin>>b[i];
}
cout<<func(m,a,b,c)<<endl;
}
return 0;
}
运行结果:
- SpringBoot解决ajax跨域问题
- WebBrowser(IE) 与 JS 相互调用
- HOSTS配置问题导致集群异常故障分析
- Linux Regulator Framework(2)_regulator driver
- systemd的作用
- alsa声卡分析alsa-utils调用过程(二)-tinymixer
- alsa声卡分析alsa-utils调用过程(一)-tinyplay
- ALSA声卡驱动的DAPM(二)-建立过程
- ALSA声卡驱动的DAPM(一)-DPAM详解
- 高通Audio中ASOC的codec驱动(二)
- vue项目里的日期格式化
- CentOS下的Mysql的安装和使用
- vue路由跳转传参数
- 刘寅:TiDB 工具链和生态
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 超实用的android自定义log日志输出工具类
- spring进行mock测试
- RecyclerView实现纵向和横向滚动
- Android ListView列表视图的使用方法
- 滴滴自动化运维平台夜莺实战部署
- Android UI使用HorizontalListView实现水平滑动
- python操作yaml说明
- python由已知数组快速生成新数组的方法
- Git 修改已提交 commit 的信息
- 解决windows下python3使用multiprocessing.Pool出现的问题
- 解决pyqt5异常退出无提示信息的问题
- TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
- 来来来,让咱重新认识一下算法的复杂度!
- 带你通过字节跳动面试---操作系统复习
- Java 8 中的接口和抽象类到底有啥区别?