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

最终输出结果为最短时间

相关推荐
钢铁男儿9 分钟前
C# 委托(调用带引用参数的委托)
java·mysql·c#
ysa05103014 分钟前
Dijkstra 算法#图论
数据结构·算法·图论
Apex Predator15 分钟前
windows安装maven环境
java·maven
Bug退退退12324 分钟前
RabbitMQ 工作模式
java·分布式·rabbitmq
一定要AK1 小时前
2025—暑期训练一
算法
一定要AK1 小时前
贪心专题练习
算法
森焱森1 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
小莫分享2 小时前
github 镜像节点
java
链上Sniper2 小时前
智能合约状态快照技术:实现 EVM 状态的快速同步与回滚
java·大数据·linux·运维·web3·区块链·智能合约
ytttr8732 小时前
matlab通过Q学习算法解决房间路径规划问题
学习·算法·matlab