流水线调度问题【java版本】
发布日期:2022-02-01 03:01:58
浏览次数:8
分类:技术文章
本文共 1680 字,大约阅读时间需要 5 分钟。
题目要求
N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为a[i]和b[i]。你可以安排每个作业的执行顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。求这个最少的时间。思路:
需要M2尽可能早用多用不出现空闲的状态。 将任务分成两类 第一类为a[i]<b[i],该种任务需要保证M2尽早开始,故非降序排列 第二类为a[i]>=b[i],这种任务会在M1中阻塞较久时间,所以需要M2中更忙一点也就是更晚结束,故非升序排列。 因为要保证第二台机器尽早开始故将第二类任务加在第一类之后。实现:
import java.util.Arrays;public class Johnson { public static void main(String[] args) { int[] a = {3, 4, 8, 10}; int[] b = {6, 2, 9, 15}; int sum = flowShop(a, b); System.out.println(sum); } public static int flowShop(int[] a, int[] b) { int[] order = new int[a.length]; Work[] works = new Work[a.length]; for (int i = 0; i < a.length; i++) { int key = a[i] > b[i] ? b[i] : a[i]; boolean job = a[i] <= b[i]; works[i] = new Work(key, i, job); } Arrays.sort(works); int j = 0; int k = a.length - 1; for (int i = 0; i < a.length; i++) { if (works[i].job) order[j++] = works[i].index; else order[k--] = works[i].index; } //将第一类任务按照升序排列,第二类任务按降序排列 // 后者接在前者之后 j = a[order[0]]; k = j + b[order[0]]; for (int i = 1; i < a.length; i++) {//到第 i 个任务的时候是第一台机器先干完还是第二台先干完 j += a[order[i]]; k = j < k ? k + b[order[i]] : j + b[order[i]]; } return k; }}class Work implements Comparable{ int key;int index;boolean job; public Work(int key, int index, boolean job) { this.key = key; this.index = index; this.job = job; } @Override public int compareTo(Work o) { return key - o.key; }}
转载地址:https://blog.csdn.net/qq_43313769/article/details/100191763 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月07日 12时54分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JavaScript面向对象编程
2019-04-27
在Javascript中使用面向对象的编程
2019-04-27
由浅入深剖析.htaccess
2019-04-27
php函数serialize()与unserialize()
2019-04-27
PHP Webservice的发布与调用
2019-04-27
php反射类 ReflectionClass
2019-04-27
php扩展xdebug基本使用
2019-04-27
为 PHP 应用提速、提速、再提速
2019-04-27
Linux下gedit显示行号
2019-04-27
《Advanced PHP Programming》读书笔记
2021-06-30
让我们谈谈RAID
2021-06-30
jQuery日期选择器插件date-input
2021-06-30
PHP使用curl_multi_add_handle并行处理
2021-06-30
NP问题
2021-06-30
AT&T与Intel汇编语言的比较
2021-06-30
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2019-04-27
选择排序
2019-04-27