问答题
阅读下列算法说明和流程图,根据要求回答问题1~问题3。
[说明]
某机器上需要处理n个作业job
1
,job
2
,…,job
n
,其中:
(1)每个作业job
i
(1≤i≤n)的编号为i,job
i
有一个收益值P[i]和最后期限值d[i];
(2)机器在一个时刻只能处理一个作业,而且每个作业需要一个单位时间进行处理,一旦作业开始就不可中断,每个作业的最后期限值为单位时间的正整数倍;
(3)job
1
~job
n
的收益值呈非递增顺序排列,即p[1]≥p[2]≥…≥p[n];
(4)如果作业job
i
在其期限之内完成,则获得收益p[i];如果在其期限之后完成,则没有收益。
为获得较高的收益,采用贪心策略求解在期限之内完成的作业序列。图3-25是基于贪心策略求解该问题的流程图。
(1)整型数组J[]有n个存储单元,变量k表示在期限之内完成的作业数,J[1..k]存储所有能够在期限内完成的作业编号,数组J[1..k)里的作业按其最后期限非递减排序,即d[J[1]]≤…≤d[J[k]]。
(2)为了便于在数组J中加入作业,增加一个虚拟作业job
0
,并令d[0]=0,J[0]=0。
(3)算法大致思想是:先将作业job
1
的编号1放入J[1],然后,依次对每个作业job
i
(2≤i≤n)进行判定,看其能否插入到数组J中。若能,则将其编号插入到数组J的适当位置,并保证J中作业按其最后期限非递减排列;否则不插入。
job
i
能插入数组J的充要条件是:job
i
和数组J中已有作业均能在其期限之内完成。
(4)流程图中的主要变量说明如下。
i:循环控制变量,表示作业的编号;
k:表示在期限内完成的作业数;
r:若job
i
能插入数组J,则其在数组J中的位置为r+1;
q:循环控制变量,用于移动数组J中的元素。
[问题2]
假设有6个作业job
1
,job
2
,…,job
6
;
完成作业的收益数组p=(p[1],p[2],p[3],p[4],p[5],p[6])=(90,80,50,30,20,10);
每个作业的处理期限数组d=(d[1],d[2],d[3],d[4],d[5],d[6])=(1,2,1,3,4,3)。
请应用试题中描述的贪心策略算法,给出在期限之内处理的作业编号序列
(4)
(按作业处理的顺序给出),得到的总收益为
(5)
。
【参考答案】
[问题2]
这是一道考查贪心算法实例应用的分析题。6个作业job
1
,job
2......
(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
点击查看答案
<上一题
目录
下一题>
热门
试题
问答题
[问题2] 请使用[说明]中的词汇,给出数据确认处理所需的数据流,在图3-19建账软件第1层数据流图中的全部可选起点。
点击查看答案
问答题
[问题1] 根据说明中的描述,使用表3-11给出的用例名称,给出图3-22中U1、U2和U3所对应的用例。
点击查看答案
相关试题
[问题6] 打印分户账清单(表3-8)时...
[问题4] 简要解释图3-22中用例U1...
[问题5] 加工1(录入比对处理)除能够...
[问题3] 根据说明中的描述,使用表3-...
[问题4] 请使用[说明]中数据字典条目...