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中即为最优的顺序

最终输出结果为最短时间

相关推荐
wuminyu6 小时前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++
txxzjmzlh6 小时前
SpringBoot 配置⽂件
java·spring boot·spring
ZhengEnCi7 小时前
模型训练完整流程:从数据准备到模型上线的 10 个关键步骤(全文可跑)
后端·算法
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
骑着蜗牛撵大象3277 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
独泪了无痕7 小时前
Hutool之LocalDateTimeUtil:让时间间隔操作如虎添翼
java
三无少女指南9 小时前
从这里开始:Java 后端与 AI 工程的三条阅读路线
java·学习路线·ai工程
香蕉大香蕉(06敬畏市场)9 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj5209 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试