流水作业调度问题 Johnson 算法
来源:互联网 发布:张小龙 知乎 编辑:程序博客网 时间:2024/05/22 15:26
问题描述:已知 n 个作业{1, 2, . . . , n}要在由两台机器 M 1 和 M 2 组成的流水线上完成加工。每个作业加工的顺序都是先在 M 1 上加工,然后在 M 2 上加工。M 1 和 M 2 加工作业 i 所需的时间分别为 a i 和 b i ,1≤ i ≤ n。流水作业调度问题要求确定这 n 个作业的最优加工次序,使得从第一个作业在机器 M 1 上开始加工,到最后一个作业在机器 M 2 上加工完成所需的时间最少。
关于流水作业调度问题的以下 Johnson 算法:
(1) 令 AB = { i | a i < b i }, BA = { i | a i ≥ b i } ;(2) 将 AB 中作业依 a i 的非减次序排列;将 BA 中作业依 b i 的非增次序排列;
(3) AB 中作业接 BA 中作业即构成满足 Johnson 法则的最优调度。
#include <stdio.h>#include <algorithm>using namespace std;#define N 8struct assignment{int a;int b;}asg[N] = {{1,2},{2,4},{3,6},{4,1},{5,7},{6,4},{7,9},{8,3}};bool cmp1(struct assignment x, struct assignment y){if (x.a >= y.a){return true;}return false;}bool cmp2(struct assignment x, struct assignment y){if (x.b <= y.b){return true;}return false;}void johnson(){struct assignment A[N], B[N];int a=0,b=0;for (int i = 0; i < N; ++i){if (asg[i].a < asg[i].b){A[a++] = asg[i];}else{B[b++] = asg[i];}}sort(A,A+N,cmp1);sort(B,B+N,cmp2);for (int i = 0; i < a; ++i){printf("(%d,%d),",A[i].a, A[i].b);}for (int i = 0; i < b; ++i){printf("(%d,%d),",B[i].a, B[i].b);}printf("\n");}int main(int argc, char const *argv[]){johnson();return 0;}
Reference:陈玉福.计算机算法设计与分析,122-123
@qingdujun
2017-11-30 北京 怀柔
阅读全文
0 0
- 流水作业调度问题 Johnson 算法
- 双机流水作业调度问题的Johnson算法
- 流水作业调度的Johnson 算法
- 加工生产调度(Johnson算法 双机流水作业调度问题)
- 算法设计之流水作业调度问题Johnson算法结论
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- 动态规划之流水作业调度Johnson法则
- 流水作业调度问题(转)
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- dp:流水作业调度问题
- 如何用jquery获取input输入框中的值?
- 浙大版《C语言程序设计(第3版)》题目集(函数题)练习5-1
- spring boot常用注解说明
- JS获取当前日期的毫秒数方式
- GTK1060安装NVIDIA driver 384
- 流水作业调度问题 Johnson 算法
- Linux clk 模型
- Box, ACM/ICPC NEERC 2004, UVa1587
- error LINK1158
- Servlet
- 浙大版《C语言程序设计(第3版)》题目集(函数题)练习5-2
- opencv floodfill与findContours结合提取轮廓
- 围观!阿里大神多隆,给程序员小哥相亲!
- LEETCODE: 729. My Calendar I & 731. My Calendar II