Johnson算法 流水线问题 java实现

某印刷厂有 6项加工任务J1,J2,J3,J4,J5,J6,需要在两台机器Mi和M2上完

成。

在机器Mi上各任务所需时间为5,1,8,5,3,4单位;

在机器M2上各任务所需时间为7,2,2,4,7,4单位。

即时间矩阵为:

T1 = {5, 1, 8, 5, 3 ,4}

T2 = {7, 2, 2, 4, 7, 4}

请解决以下问题:

1.给出任务的最优加工顺序,使得总加工时间最短;

2.计算加工完成所有任务的最短总时间;

算法流程:

  1. 把ai<=bi 的放在数组list1,把ai>bi放在数组list2中

  2. 把list1进行从小到大排序,list2从大到小排序

  3. 把list1和list2进行合并,list1在前list2在后,这个顺序即为加工的顺序

java 复制代码
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] A = new int[n];
        for (int i = 0; i < n; i++) {
            A[i] = sc.nextInt();
        }
        int[] B = new int[n];
        for (int i = 0; i < n; i++) {
            B[i] = sc.nextInt();
        }

        List<int[]> list1 = new ArrayList<>();
        List<int[]> list2 = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            if (A[i] <= B[i]) {
                list1.add(new int[]{A[i], B[i]});
            } else {
                list2.add(new int[]{A[i], B[i]});
            }
        }
        list1.sort((o1, o2) -> o1[0] - o2[0]);
        list2.sort((o1, o2) -> o2[1] - o1[1]);
        List<int[]> list = new ArrayList<>();
        list.addAll(list1);
        list.addAll(list2);
        int AA = 0;
        int BB = 0;
        for(int[] arrs : list){
            AA+=arrs[0];
            BB = Math.max(AA,BB) + arrs[1];
        }
        System.out.println(Math.max(AA,BB));

    }

list中即为最优的顺序

最终输出结果为最短时间

相关推荐
123461612 分钟前
互联网大厂Java面试:从Spring Boot到微服务的探索
java·数据库·spring boot·微服务·面试·mybatis·orm
光仔December3 分钟前
【Elasticsearch入门到落地】18、Elasticsearch实战:Java API详解高亮、排序与分页
java·elasticsearch·es排序·es分页·es高亮
码上零乱3 分钟前
跟着小码学算法Day19:路径总和
java·数据结构·算法
ai旅人10 分钟前
深入理解OkHttp超时机制:连接、读写、调用超时全面解析
java·网络·okhttp
NON-JUDGMENTAL15 分钟前
Tomcat 配置问题速查表
java·tomcat
一 乐18 分钟前
农产品销售系统|农产品电商|基于SprinBoot+vue的农产品销售系统(源码+数据库+文档)
java·javascript·数据库·vue.js·spring boot·后端·农产品销售系统
蒲公英源码22 分钟前
java企业OA自动化办公源码
java·spring boot·后端
鬼火儿1 小时前
集成RabbitMQ+MQ常用操作
java·后端
ZHE|张恒1 小时前
Java 通配符
java
Merrick1 小时前
Java 方法参数默认值新方案:使用DefArgs!
java·后端