题记:
今天来给大家讲解一下关于流水作业的调度问题,如何用JavaScript来实现。
正文:
问题描述:
n个作业{0,1,2,…,n}在2台机器上M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,后在M2上加工。在两台机器上加工的时间分别为ai和bi。
目标:确定这n个作业的加工顺序,使得从第一台作业开始加工,到最后一个作业完成加工所需要的时间最少。
算法描述:
- 令N1={t|t[t,1]< t[i,2]},N2={t[i,1]>=t[i,2]};
- 将N1 中作业依t[i,1]的非减序排列;将N2中作业依t[i,2]的非增序排列;
解释:
其实,我们仔细看看,可以把任务简单的划分一下。
首先,我们将这些作业分为2组:
一组是先执行的:在m1上执行的时间<在m2上执行的时间,有利于我们保证m2机器上没有等待
一组是后执行的:在m2上执行时间>在m1上执行的时间,这些不利于m2机器没有等待,所有后执行
然后,我们再对这两组任务进行划分:
将先执行的一组任务中的任务,按照在m1上执行时间非减序来排列,也就是哪个时间短先执行哪个
再将后执行的一组任务中的任务,按照在m2上执行时间非增序来排列,也是哪个时间长先执行哪个
这样来看,我们的任务就十分简单了,然后我们用代码来实现。
代码实现:
1.首先我们构造两个机器上执行作业的时间数组,和最基本的函数,分别如下:
var m1 = [2,7,6,4,6,8], // 表示在机器1上所用的时间
m2 = [5,3,2,7,9,2]; // 表示在机器2上所用的时间
function assemblyLine