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

最终输出结果为最短时间

相关推荐
微尘寒风1 小时前
【Git】的安装和使用
java·git
y = xⁿ2 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
侧耳倾听1112 小时前
jwt使用简介
java·jwt
顶点多余3 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI人工智能+电脑小能手3 小时前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
jay神3 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
2601_962066494 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
罗西的思考4 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
yaoxin5211235 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F5 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++