原文地址: https://blog.csdn.net/qingdujun/article/details/84283789

问题描述:已知 n 个作业{1, 2, . . . , n}要在由两台机器 M 1 和 M 2 组成的流水线上完成加工。每个作业加工的顺序都是先在 M 1 上加工,然后在 M 2 上加工。M 1 和 M 2 加工作业 i 所需的时间分别为 ai和 bi ,1≤ i ≤ n。流水作业调度问题要求确定这 n 个作业的最优加工次序,使得从第一个作业在机器 M 1 上开始加工,到最后一个作业在机器 M 2 上加工完成所需的时间最少。

关于流水作业调度问题的以下 Johnson 算法:

(1) 令 AB = { i | ai < bi}, BA = { i | ai ≥ bi } ;
(2) 将 AB 中作业依 ai 的非减次序排列;将 BA 中作业依 bi 的非增次序排列;

(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 北京 怀柔

流水作业调度问题 Johnson 算法相关推荐

  1. 【算法设计与分析】流水作业调度问题 动态规划算法与代码实现 超详细

    题目描述 "加工顺序问题"又被称为"批处理作业调度问题". 设有n个工件需要在机器M1和M2上加工,每个工件的加工顺序都是先在M1上加工,然后在M2上加工.t1 ...

  2. poj 2751 双机调度问题Johnson算法(贪心)

    题意: 2台机器,n件任务,每件任务必须先在S1上做,再在S2上做.任务之间先做后做任意.求最早的完工时间. 分析: 这是一个经典问题:2台机器的情况下有多项式算法(Johnson算法),3台或以上的 ...

  3. python 流水作业调度_流水作业调度问题

    1.问题描述: n个作业{1,2,-,n}要在由2台机器M1和M2组成的流水线上完成加工.每个作业加工的顺序都是先在M1上加工,然后在M2上加工.M1和M2加工作业i所需的时间分别为ai和bi.流水作 ...

  4. 加工生产调度(Johnson算法 双机流水作业调度问题)

    加工生产调度 题目描述: 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n ...

  5. 贪心算法训练(七)——加工生产调度(流水作业调度问题)

    贪心算法训练(七)--加工生产调度(流水作业调度问题) 1. 问题描述 某工厂收到了 n 个产品的订单,这 n 个产品分别在 A.B 两个车间加工,并且必须先在 A 车间加工后才可以送到 B 车间.某 ...

  6. 【算法】优先队列的分枝限界算法的流水作业调度问题(C++源码)

    [算法]优先队列的分枝限界算法的流水作业调度问题(C++源码) 一.任务描述 二.步骤描述 三.运行结果截图 四.源代码(C++) 一.任务描述 有一个流水作业调度问题,n=4,a[]={5,10,9 ...

  7. 动态规划作业排程java_动态规划之流水线作业(Johnson算法)

    该题题目为: 设有n个作业要在2台机器M1和M2 组成的流水线上完成加工.每个作业加工的顺序都是现在M1 上加工,然后在M2 上加工,所需时间分别为ai和bi.流水作业调度问题要求求加工完这些作业所需 ...

  8. 算法导论——所有点对最短路径:稀疏图Johnson算法

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.graph;import org.loda.structure.Stack; import ...

  9. 所有结点对的最短路径问题之Johnson算法

    Johnson算法可以在O(V*V lgV + VE)的时间内找到所有节点对之间的最短路径,对于稀疏图来说,算法的渐进表现要由于重复平方法和FloydWarshall算法,如果图没有权值为负值的环路, ...

  10. 稀疏图Johnson算法

    在前面的文章<所有节点对的最短路径问题>中,我们介绍了用于稀疏图的Johnson算法,由于代码比较长,我们将其单独放在一篇文章之中. Johnson算法的时间复杂度在使用二叉堆作为最小优先 ...

最新文章

  1. java 常用正则表达式
  2. logstash mysql eror_Logstash安装记录(报错com.mysql.jdbc.Driver not loaded的解决)
  3. CentOS6.8下安装Docker
  4. 【Vegas2006】自我介绍for校青春风采大赛
  5. java ejb3.0_初识EJB3.0 ---配置与运行篇
  6. 四章: CentOS6.5 配置连接Windows远程桌面、创建新用户、禁用root在本地或远程使用ssh登录
  7. 通过document id和content拿到SAP document的binary data
  8. python3.5安装scrapy_Python3.5下安装测试Scrapy
  9. golang switch_为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?
  10. 跟我一起认识axure(三)
  11. 这首致喷子杠精的“键盘侠之歌” 唱出了多少人的心声
  12. vim可以用来编译python吗_Linux下编译Vim以支持python2.x
  13. C++构造函数与析构函数调用虚函数的注意事项
  14. python支持向量机回归_Python机器学习之支持向量机——非线性SVC
  15. login组件的两种用法_Vue.js 组件该如何正确的复用和扩展
  16. DZ先生怪谈GAT1400之视图库系统架构
  17. PINN内嵌物理知识神经网络入门及文献总结
  18. MEM专业学位论文选题与研究设计
  19. IDEA上传代码至github
  20. arduino/mixly 智纳捷TTS语音合成模块进阶一

热门文章

  1. EDFbrowser查看edf文件及睡眠分期认识
  2. rs485接收中断函数使能_RS485通讯几种常见问题
  3. c语言编译器手机版显示错误,C语言编译器的错误信息
  4. python高琦_张永伟:语文辞书在异形词规范中的作用——以含有非规范汉字的异形词处理为例...
  5. ListView优化
  6. Android源码下载编译(TI)
  7. 【转载】VC项目配置基础
  8. 解决安装vc2005运行库时提示Command line option syntax error.Type Command/?for Help
  9. Ubuntu16 e1000e驱动安装
  10. 指标赋权与评价类方法总结