问答题

[说明]
某机器上需要处理n个作业job1,job2,…,jobn,其中:
(1)每个作业jobi(1≤i≤n)的编号为i,jobi有一个收益值P[i]和最后期限值d[i];
(2)机器在一个时刻只能处理一个作业,而且每个作业需要一个单位时间进行处理,一旦作业开始就不可中断,每个作业的最后期限值为单位时间的正整数倍;
(3)job1~jobn的收益值呈非递增顺序排列,即p[1]≥p[2]≥…≥p[n];
(4)如果作业jobi在其期限之内完成,则获得收益p[i];如果在其期限之后完成,则没有收益。
为获得较高的收益,采用贪心策略求解在期限之内完成的作业序列。图3-25是基于贪心策略求解该问题的流程图。
(1)整型数组J[]有n个存储单元,变量k表示在期限之内完成的作业数,J[1..k]存储所有能够在期限内完成的作业编号,数组J[1..k)里的作业按其最后期限非递减排序,即d[J[1]]≤…≤d[J[k]]。
(2)为了便于在数组J中加入作业,增加一个虚拟作业job0,并令d[0]=0,J[0]=0。
(3)算法大致思想是:先将作业job1的编号1放入J[1],然后,依次对每个作业jobi(2≤i≤n)进行判定,看其能否插入到数组J中。若能,则将其编号插入到数组J的适当位置,并保证J中作业按其最后期限非递减排列;否则不插入。
jobi能插入数组J的充要条件是:jobi和数组J中已有作业均能在其期限之内完成。
(4)流程图中的主要变量说明如下。
i:循环控制变量,表示作业的编号;
k:表示在期限内完成的作业数;
r:若jobi能插入数组J,则其在数组J中的位置为r+1;
q:循环控制变量,用于移动数组J中的元素。


1. [问题1]
请将图3-25中的(1)~(3)空缺处的内容填写完整。

【参考答案】

[问题B]
这是一道考查贪心算法实例应用的分析题。F个作业jobA,jobB......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
[问题2] 根据补充后的E-R图,球队与球员之间的1:N联系应通过将1端实体(球员)的主码(球队名称)加入到N端实体(球员)对应的关系中来表达。这类联系也可通过独立的一个关系来表达,如球队-球员 (球队名称,队员编号),这样会对查询增加多余的连接操作,因此一般不采用这种方法。 同样,球队与教练之间的1:1联系也应通过将一方的主码增加到另一方实体对应的关系中,来表达联系。 训练和比赛为多对多联系,只能独立成一个关系模式,取该联系相关联的各实体的码及联系自有的属性构成。如比分和分组应该是比赛的属性,再加上球队、裁判、场地的码,即构成“比赛记录”的关系模式。比赛记录关系模式的主键可以是“场地名称,比赛时间”,也可以是“裁判,比赛时间”,或者是“甲队,比赛时间”,再或者是“乙队,比赛时间”。其外键是“甲队,乙队,场地名称,裁判”。 同理,训练是球队和场地的多对多联系,训练开始时间和结束时间为训练的属性,加上球队的码和场地的码,构成“训练记录”关系模式。训练记录关系模式的主键可以是“球队,开始时间”,也可以是“场地名称,开始时间”,或者是“球队,结束时间”,再或者是“场地名称,结束时间”。其外键是“球队名称,场地名称”。