动态规划之johnson流水线调度
来源:互联网 发布:java开发手册下载 编辑:程序博客网 时间:2024/04/30 11:17
双机流水作业调度问题的Johnson算法
n个作业要在由两台机器M1和M2组成的流水线上完成加工. 每个作业i必须先在M1上然后在M2上加工, 时间分别为ai和bi
确定这n个作业的加工顺序, 使得从第一个任务开始在M1上加工到最后一个任务在M2上加工完成的总时间尽量小.流水线作业调度问题要求确定这n个作业的最佳加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在M2加工完成所需的时间最少。
Johnson算法.
设N1为a<b的作业集合, N2为a>=b的作业集合, 将N1的作业按a非减序排序, N2中的作业按照b非增序排序, 则N1作业接N2作业构成最优顺序.
设 n = 4,(a1,a2,a3,a4)=(3,4,8,10),(b1,b2,b3,b4)=(6,2,9,15)
我们先构造一个三元组
struct Job{
int node; //加工顺序
int min; //对于每个作业 ai 与bi中的较小者
int ab; //对于是M1还是M2中的设备,设备号
} job[n]; //代表有n个作业
for( int i =1 ;i <=n ;i++)
{
if( a[i]<=b[i] )
{
job[i] .min = a[i];
job[i].ab = 1;
job[i].node =i;
}
else
{
job[i] .min = b[i];
job[i].ab = 2;
job[i].node =i;
}
}
sort(job,n); 我们需要将三元组从小到大排序
int j=0; //代表开头
int k=n; //代表结束
for( int i=1; i<=n; i++) //c[]代表最佳的输出顺序 ,但我们还需要求出最短的调度时间
{
if( job[i].ab == 1)
c[j++] = i ; a[] < b[] 从c[]前面插入
if(job[i].ab == 2)
c[k--] =i ; a[] > b[] 从c[]的后前插入
}
j = a[ c[1] ];
k = j+ b[ c[1] ];
for( int i=2; i<=n; i++)
{
j=+a[ c[i] ];
k = j>k?j+b[ c[i] ]:k+b[ c[i] ] //两个的大小分别代表,1 .必须等待M1运行完才能到M2,2.M2已经运行玩了,再等待M1。
}
return k; //k就是我们所要求的最短时间,c[]是我们所要得的最佳输出顺序,
- 动态规划之johnson流水线调度
- 动态规划之流水作业调度Johnson法则
- 动态规划---->流水线调度问题
- 动态规划算法中的流水线调度问题
- 流水线调度问题——动态规划
- Johnson法则——流水作业调度——动态规划
- 动态规划解决流水作业调度(Johnson法则)
- 51nod 1205 流水线调度(Johnson规则)
- 动态规划-流水线问题
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 动态规划之装配线调度
- 动态规划之装配线调度
- 动态规划之装配线调度
- 算法之道_流水线装配问题_动态规划
- 上传excel文件 并获取其信息(使用file上传组件)
- 2012/11/19
- Using SQLite in your Windows 8 Metro style applications
- 字符串匹配之首尾匹配算法
- 黑马程序员---泛型
- 动态规划之johnson流水线调度
- 判断list里是否存在某值
- 分享 silverlight oob模式下, 获取本地打印机信息类 和 使用方法
- oracle创建多个数据库,通过浏览器链接问题
- 域名如何解析
- 服务程序中如何得到当前登陆用户名
- DJNative Swing 之JWebBrowser总结
- Java环境下AO开发之环境部署及注意事项(eclipse平台)
- 王爽《汇编语言》第9章 实验9 根据材料编程