Johnson 算法

Johnson 算法nbsp 求解流水作业调度问题的 Johnson 算法具体描述如下 1 nbsp nbsp nbsp nbsp nbsp nbsp 设 a i 和


  求解流水作业调度问题的 Johnson 算法具体描述如下:

(1)       a[i] b[i] 0<=i
)分别为作业
i
在两台设备上的处理时间。建立由三元组(作业号,处理时间,设备号)组成的三元组表
d
。其中,处理时间是指每个作业所包含的两个任务中时间较少的处理时间。例
7

11
的作业
0
的三元组为(
0

3

0
),作业
1
的三元组为(
1

2

1

……
如图
7

18

a
)所示。

(2)       对三元组表按处理时间排序,得到排序后的三元组表 d 。如图 7 18 b )所示。

(3)       对三元组表的每一项 d i (0<=i
从左右两端生成最优作业排列
c[j](0<=j
是作业号。如果
d[i]
设备号为
1
,则将作业
i
置于
c
的左端末尾,否则置于
c
的右端末尾。如图
7

18

c
)所示,由两端想中间存放。

 

                                                                     

 

作业号

处理时间

设备号

0

1

2

2

1

0

3

1

2

2

8

1

3

3

9

1

 

 

作业号

处理时间

设备号

0

0

3

1

1

1

2

2

2

2

8

1

3

3

10

1

(a) 三元组表                                     (b) 按处理时间排序

 

 

 (0,     2,   3,     1)

 (c) 最优作业排列

 

P1

3

8

10

4

 

P2

6

9

15

2

    (d) 最优调度方案

 

程序 7 12 流水作业调度的 Johnson 算法。                

程序【 7 12 Johnson 算法

 Struct Triplet{
      //
三元组结构

   Int  Operator<(Triplet b)const {return t

 Int jobNo,t,ab;        //jobNo 为作业 , 体委处理时间 ,ab 为设备号

};

Void FlowShop(int n,int *a,int*b,int*c)

{

Triplet d[mSize]={
{0,0,0}};

 For(int i=0;i

算法步骤
(1),
生成三元组表
d

     If (a[i]


   d[i].jobNo=i;d[i].ab=0;d[i].t=a[i];

}

Else {

  d[i].jobNo=i;d[i].ab=1;d[i].t=b[i];

}

Sort(d,n);        // 算法步骤 (2), 任意排序算法

Int  left=0,right=n-1;

For(i=0;i

算法步骤
(3),
生成最优解

  If (d[i].ab==0)c[left++]=d[i].jobNo;

  Else c[right–]=d[i].jobNo;

}

Johnson 算法的时间取决于对作业集合的排序 , 因此 , 在最怀情况下算法的时间复杂度为 O(nlogn), 所需的空间复杂度为 O(n).

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208055.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:28
下一篇 2026年3月19日 下午12:28


相关推荐

  • 及时雨!Nano Banana被下架不用愁?8 大免费渠道直接冲

    及时雨!Nano Banana被下架不用愁?8 大免费渠道直接冲

    2026年3月13日
    2
  • 收藏!小白程序员快速入门大模型:从发展历程到应用实践全解析

    收藏!小白程序员快速入门大模型:从发展历程到应用实践全解析

    2026年3月14日
    2
  • 小程序即时通讯聊天控件(一)

    小程序即时通讯聊天控件(一)小程序即时通讯——文本、语音输入控件(一)集成近期一直在做微信小程序,业务上要求在小程序里实现即时通讯的功能。这部分功能需要用到文本和语音输入及一些语音相关的手势操作。所以我写了一个控件来处理这些操作。控件样式我们先来看下效果目前的功能就是动态图中展示的,我们可以使用这个控件来切换输入方式(文本或语音)、获取到输入的信息、取消语音输入、语音消息录制过短过长的判断(该接口暂时还未开放),支持发送图片和

    2022年5月14日
    55
  • ELK入门及高级应用+docker部署ELK

    ELK入门及高级应用+docker部署ELK一 基于 7 5 1dockerpulld elastic co logstash logstash 7 5 1dockerpulld elastic co elasticsearc elasticsearc 7 5 1dockerpulld elastic co kibana kibana 7 5 1 二 部署 Elasticsearc 创建 docker 子网络 dockernetwor net2 安装 ElasticSe

    2026年3月17日
    5
  • Linux硬盘的检测–smartctl详细介绍

    Linux硬盘的检测–smartctl详细介绍概述 随着硬盘容量、速度的快速发展,硬盘的可靠性问题越来越重要,今天的单块硬盘存储容量可轻松达到1TB,硬盘损坏带来的影响非常巨大。不同的文件系统(xfs,reiserfs,ext3)都有自己的检测和修复工具。检测之前可以先使用dmesg命令查看有没有硬件I/O故障的日志,如果有,先用fsck看看是不是文件系统有问题,如果不是则可以使用下面介绍硬盘检测和优化方法来修复它。grep"erro…

    2022年6月15日
    34
  • 【算法】复变函数

    【算法】复变函数复变函数复数与复变函数复数复变函数导数积分级数留数保形映射解析函数对平面向量场的应用复数与复变函数复数复数的代数运算:复数四则运算的几何意义:①两个复数乘积的模等于它们模的乘积;两个复数乘积的幅角等于它们幅角的和②两个复数商的模等于它们模的商;两个复数商的幅角等于被除数与除数的幅角差③复数的加减:复数的幂乘和方根①幂乘②方根(这里w≠0,n≥2)的复数…

    2022年7月13日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号