5算法第五章贪心法
第5章 贪心法

5.1 引言
三、背包问题
1.背包问题 给定一个承重量为C的背包,n个重量分别为 w1,w2,…,wn的物品。已知物品i放入背包能产生vi的价 值(放入单位重量的物品i,产生的价值为vi/wi), i=1,2,…,n。如何装包才能获得最大价值? 实际上,就是要求找到一组非负且不超过1的实数
x1,x2,…,xn满足∑xiwi≤C,且使得∑xivi达到最大值。
三、背包问题
Sort(n,v,w); int i; for (i=1;i<=n;i++) x[i]=0; float c=M; for (i=1;i<=n;i++) { if (w[i]>c) break;
5.1 引言
算法knapsack的 主要计算时间在于将 各种物品依其单位重 量的价值从大到小排 序。因此,算法的计 算时间上界为 O(nlogn)。 为了证明算法的正确 性,还必须证明背包 问题具有贪心选择性 质。
5.1 引言
三、背包问题
3.求解思想 贪心准则2——根据物品的重量由小到大来放。
从剩下的物品中选择可装入背包的重量最小的物品。 虽然这种规则对于前面的例子能产生最优解,但在一般 情况下则不一定能得到最优解。 (由上面实例可知,它不是最优贪心准则)
5.1 引言
三、背包问题
3.求解思想 贪心准则3——根据价值/重量(即单位价值)由大 到小来放。 每一项计算yi=vi/Wi,即该项值和大小的比,再按 比值的降序来排序,从第一项开始装背包,然后是第二 项,依次类推。尽可能的多放,直到装满背包。 (可以证明它是最优贪心准则)
5.2单源最短路问题
五、Dijkstra算法
算法中图使用邻接表表示,其示意图如下。
第五章 贪心法

贪心算法:4、1、1
数量最少:3、3
贪心算法
人们通常希望找到整体最优解(或全局最优 解),那么贪心法是不是没有价值呢? 答案是否定的,这是因为某些求解问题中,当 满足一定的条件时,这些局部最优解就转变成 了整体最优解,所以贪心法的困难部分就是要 证明所设计的算法确实是整体最优解或求解了 它要解决的问题。
(1,2/15,0) (0,2/3,1) (0,1,1/2)
16.5
20 20 20
24.25
28.2 31 31.5
贪心算法的数据选择策略1:
(v1,v2,v3)=(25,24,15), (w1,w2,w3)=(18,15,10)
用贪心策略求解背包问题时,首先要选出最优的度量 标准。 选取目标函数为量度标准,每装入一件物品就使背包 获得最大可能的效益值增量。在这种量度标准下的贪心方法 就是按效益值的非增次序将物品一件件放到背包中。 如上面的实例所示,可将物品按效益量非增次序排序: (v1,v2,v3)=(25,24,15)。先装入物品1重量为 18,即x1=1; 然后再装物品2,由于约束条为∑wi xi ≤W=20,所以物品2 只能装入重量为2的一小部分,即x2=2/15。 按上述的数据选择策略,装入顺序是按照物品的效益 值从大到小的输入,由刚才的方法可得这种情况下的总效益 值为∑vixi = 25+24*2/15=28.2,显然是一个次优解,原因 是背包容量消耗过快。
贪心算法的特点 1、可行的 必须满足约束条件 2、局部最优 当前步骤中所有可行选择中最佳的局部选 择 3、不可取消 选择一旦做出,在算法的后面步骤中就无 法改变
5.1.2 贪心法求解的问题应具有的性质
1. 贪心选择性质
所谓贪心选择性质是指所求问题的整体最优解可 以通过一系列局部最优的选择,即贪心选择来达到。 而贪心算法则通常以自顶向下的方式进行,以
第五章 贪心算法

贪心法解活动安排问题
按fi非减序对活动排序 相容活动子集合最大—贪心选择与已选活动相容, 且fi小者.
例:设待安排的11个活动的开始时间和结束时间按 结束时间的非减序排列如下:
i si fi 1 1 4 2 3 5 3 0 6 4 5 7 5 3 8 6 5 9 7 6 10 8 8 11 9 8 12 10 2 13 11 12 14
贪心法解背包问题解法2 贪心法解背包问题解法2
√
贪心选择价值 重量大者 价值/ 2. 价值最大 — 贪心选择价值/重量大者 例:背包重量10 背包重量 物体1:重量9 物体 :重量 物体2:重量4 物体 :重量 物体3:重量3 物体 :重量 价值5 价值 价值4 价值 价值2 价值
①初始:背包剩余重量m=M=10
有两类背包问题: 物体可分割—本节研究 物体不可分割—0/1背包问题,后续章节研究
背包问题的数学描述
假设: x i 是物体 i被装入背包的部分, 0 ≤ x1 ≤ 1. 根据问题要求,背包问 题的数学描述为: max
nБайду номын сангаас
∑px
i =1 i i
n
i i
∑ω x
i =1
=M
即求X=(x1,x2,…,xn),满足上述优化方程.
其中 x i = 1表示装入集装箱 i, x i = 0 表示不装入集装箱 i.
贪心法解最优装载问题
目标是装入集装箱个数最多—贪心选择重量轻者优先
例:c=100吨 w1=10吨 w2=30吨 w3=20吨 w4=40吨 ① 初始剩余载重g=100 装入个数k=0 ② 贪心选择w1 w1<g 故x1=1 g=g-w1=90 k=1 ③ 贪心选择w2 w2<g 故x2=1 g=g-w2=60 k=2 同理,继续.得X={1,1,1,1}
贪心算法基本步骤

贪心算法基本步骤贪心算法是一种非常常用的算法思想,广泛应用于算法设计中。
本文将介绍贪心算法的基本步骤、实现方式、应用场景以及优缺点。
一、基本步骤贪心算法的基本步骤可概括为:定义最优解的性质->利用贪心策略获得局部最优解->将局部最优解合并成一个整体最优解。
具体来说,一般包括以下几个步骤:1. 确定问题的最优解性质:要知道问题的最优解应该具有怎样的性质或特征,这些性质可以用于判断一个解是否符合规则或结果是否符合要求。
2. 构造候选解集:根据最优解的性质,不断构造可行的候选解集合,并通过一定的方法筛选出其中的解。
3. 选择最优解:从候选解集中选择一个最优解。
4. 验证最优解:通过验证最优解是否合法(满足约束条件)以及是否为问题的最优解,来验证贪心策略的正确性。
二、实现方式贪心算法的实现方式是比较灵活的,有些问题可以通过贪心策略来解决,有些则不行。
一般而言,如果问题的最优解具有贪心选择性质(即每一步的局部最优解能导致全局最优解),则采用贪心策略是可行的。
对于一些场景,我们可以通过规律来得到贪心策略。
例如:1. 集合覆盖问题:从未被覆盖的地方中选择一个覆盖点集最大的点,并删除所有覆盖的集合;2. 分数背包问题:选择性价比最高的物品,先吸纳尽量多的物品,再考虑其他物品。
三、应用场景1. 背包问题:针对背包问题和其变种,常见的贪心策略有分数背包(与完全和01背包有区别)和完全背包问题;2. 活动安排问题:在一些课程、项目或活动间选择,使得能够安排最多活动;3. 区间选择问题:在一些区间间选择相互不重叠的区间,使得能够选出最大的区间数;4. 集合覆盖问题:在一些集合中选择最少的集合,使得能够覆盖所有元素。
四、优缺点优点:1. 算法简单:贪心算法通常比较简单,易于理解和实现;2. 运算速度快:其时间复杂度一般较低,运算速度很快;3. 可以作为其他算法的优化:贪心策略可以应用于其他算法的优化中。
缺点:1. 不一定能够得到最优解:贪心策略仅考虑当前的局部最优解,对于全局最优解可能产生影响;2. 单一性:贪心算法的结果是唯一的,难以应对变化条件的需要,一旦局部最优解不满足当前的情况,算法就会失去原先的效果;3. 实现困难:对于有些问题,贪心算法并不是很好实现,涉及到更多的问题分析和模型的构造。
算法设计与分析 第五章 贪心算法

第五章 贪心算法§1.贪心算法基本思想找零钱 假如售货员需要找给小孩67美分的零钱。
现在,售货员手中只有25美分、10美分、5美分和1美分的硬币。
在小孩的催促下,售货员想尽快将钱找给小孩。
她的做法是:先找不大于67美分的最大硬币25美分硬币,再找不大于67-25=42美分的最大硬币25美分硬币,再找不大于42-25=17美分的最大硬币10美分硬币,再找不大于17-10=7美分的最大硬币5美分硬币,最后售货员再找出两个1美分的硬币。
至此,售货员共找给小孩6枚硬币。
售货员的原则是拿尽可能少的硬币个数找给小孩。
从另一个角度看,如果售货员将捡出的硬币逐一放在手中,最后一起交给小孩,那么售货员想使自己手中的钱数增加的尽量快些,所以每一次都尽可能地捡面额大的硬币。
装载问题 有一艘大船用来装载货物。
假设有n 个货箱,它们的体积相同,重量分别是n w w w ,,21 ,货船的最大载重量是c 。
目标是在船上装最多货箱该怎样装?如果用1=i x 表示装第i 个货箱,而0=i x 表示不装第i 个货箱,则上述问题是解优化问题:求n x x x ,,,21 ,∑=ni i x 1max (5.1.1)c x i ni i ≤∑=1w (5.1.2)贪心方法,顾名思义,是在决策中总是作出在当前看来是最好的选择。
例如找零钱问题中,售货员每捡一个硬币都想着使自己手中的钱尽快达到需要找钱的总数。
在装载问题中,每装一个货箱都想着在不超重的前提下让船装更多的箱子。
但是贪心方法并未考虑整体最优解,它所作出的选择只是在某种意义上的局部最优选择。
当然,在采用贪心算法时未必不希望结果是整体最优的。
事实上,有相当一部分问题,采用贪心算法能够达到整体最优,如前面的找零钱问题以及后面将要讲到的单点源最短路径问题、最小生成树问题、工件排序问题等。
为了更好理解贪心算法,我们将装载问题稍加推广,考虑可分割的背包问题。
背包问题 已知容量为M 的背包和n 件物品。
第05章.贪心算法

di
ωi ti
4
70 2 0 3 1
2
60 11 1
4
5ቤተ መጻሕፍቲ ባይዱ 1 0
3
40 1
1
30 -
4
20 -
6
10 1
结论:2,4,1,3,7,5,6
0-1背包问题
第 05 章 贪 心 算 法
有一容量为W的背包,和一批体积分别为wi, 价值为vi的物品, i=1…n;问将哪些物品装入 背包,使得背包中的总价值最大? 0-1背包问题不满足最优子结构性质,不能用 贪心法来求解,而应用分治法求解。分治规则 为:
S(w1..n, v1..n, W) = max { S(w1..n-1, v1..n-1, W-wn)+vn, S(w1..n-1, v1..n-1, W) }
贪心算法的理论基础
1、拟阵
第 05 章 贪 心 算 法
例如:S定义为一个无向图的边集,I定义为图中 不含回路的边的集合的全体;即若A ∈I,则A中 的边构成一个森林; 给定一个拟阵M=(S,I),对I中的一个独立子 集A ,若S中存在元素x不属于A,使得A∪{x} ∈I, 则称x为A的一个可扩展元素; 当S中的一个独立子集A没有可扩展元素时,称A 为一个极大独立子集; 极大独立子集性质:拟阵M中所有的极大独立子 集具有相同大小;
贪心算法的理论基础
2、带权拟阵的贪心算法
第 05 章 贪 心 算 法
对拟阵M=(S,I)的S指定一个权函数W, 使对x∈S,有W(x)>0,称M为带权拟阵,S 的子集A的权定义为A中全部元素的权值和; 问题:求解最大权独立子集,即确定A∈I, 且W(A)达到最大;A称为M的一个最优子集; 最优子集也是极大独立子集;
5贪心算法要点

41 2018/12/19
else if(k[j2]<t[j])//皇帝好马 < 田忌好马 , 田忌赢 , 用好马 { m+=200; } else//相同的好马 { while(k[i2]<t[i] && i<j)//皇帝劣马 < 田忌劣马 , 田忌赢 { m+=200; i++;i2++; } if(i!=j) { if(k[j2]>t[i]) m-=200; i++; j++; } } } return 0;
16 2018/12/19
算法分析:
如果N>=M,那么显然用M条长度为1的 线段可以覆盖住所有的区间,所求的线 段总长为M。 如果N=1,那么显然所需线段总长 为:… 如果N=2,相当于N=1的情况下从某处断 开(从哪儿断开呢?)。 如果N=k呢?
17 2018/12/19
练习
18 2018/12/19
ACM 程序设 计
信息学院
1 2018/12/19
今天,
你 了吗?
2 2018/12/19
贪心算法
(Greedy Algorithm)
3 2018/12/19
找零钱
出纳员手里有10元,5元,1元,5角,2 角,1角的钱,现有客户付钱,应找给 他57元8角,该如何找钱能使钱的张数 最少?
4 2018/12/19
2018/12/19
28
Gone Fishing
- ACM/ICPC Regional Contest East Central North America1999
问题分析:
贪心算法5

1
学习要点
理解贪心算法的概念。掌握贪心算法的基本要素。
(1)求解最优结构问题 (2)贪心选择性质
理解贪心算法与动态规划算法的差异;理解贪心算法的 一般理论;通过应用范例学习贪心设计策略。
(1)活动安排问题; (2)最优装载问题; (3)哈夫曼编码; (4)单源最短路径; (5)最小生成树; (6)多机调度问题。
算法huffmanTree用最小堆实现优先队列Q。初 始化优先队列需要O(n)计算时间,由于最小堆的 removeMin和put运算均需O(logn)时间,n-1次的 合并总共需要O(nlogn)计算时间。因此,关于n个字 符的哈夫曼算法的计算时间为O(nlogn) 。
26
4.4 哈夫曼编码
3、哈夫曼算法的正确性
实际上也是如此,动态规划算法的确可以有效地解01背包问题。
19
4.3 最优装载
有一批集装箱要装上一艘载重量为c的轮船。其中 集装箱i的重量为Wi。最优装载问题要求确定在装载体 积不受限制的情况下,将尽可能多的集装箱装上轮船。
1、算法描述
最优装载问题可用贪心算法求解。采用重量最轻者 先装的贪心选择策略,可产生最优装载问题的最优解。 具体算法描述如下页。
1、前缀码
对每一个字符规定一个0,1串作为其代码,并要求 任一字符的代码都不是其它字符代码的前缀。这种编码 称为前缀码。
23
4.4 哈夫曼编码
编码的前缀性质可以使译码方法非常简单。 表示最优前缀码的二叉树总是一棵完全二叉树,即 树中任一结点都有2个儿子结点。 平均码长定义为:
B(T ) f (c)dT (c) cC
3
4.1 活动安排问题
活动安排问题就是要在所给的活动集合中选出最 大的相容活动子集合,是可以用贪心算法有效求解的很 好例子。该问题要求高效地安排一系列争用某一公共资 源的活动。贪心算法提供了一个简单、漂亮的方法使得 尽可能多的活动能兼容地使用公共资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章贪心方法目录⏹5.1 一般方法⏹5.2 背包问题⏹5.3 带有期限的作业排序⏹5.4 最优归并模式(略)⏹5.5 最小生成树(略)⏹5.6 单源点最短路径(略)5.1 一般方法⏹方法适用的问题特点⏹方法的基础知识⏹方法的求解步骤及核心问题⏹方法的抽象化控制⏹方法的缺点和优点一个现实世界里的例子⏹如果有一个机会可以帮助你梦想成真,那么你希望参加哪两个活动(2010年盛事):☐1 去南非看足球世界杯;☐2 到上海看世博会;☐3 参加瑞士公主的大婚庆典;☐4 现场观看广州亚运会。
1、21、31、42、32、43、4贪心方法适用的问题特点有这样一类问题:它有n个输入, 而它的解就是这n个输入的某个子集,这些子集必须满足某些事先给定的条件。
约束条件可行解最优解目标函数1、21、31、42、32、43、4两个活动个人喜好基础知识⏹贪心方法是指在对问题求解时,总是做出在当前看来是最好的选择。
⏹贪心方法的思想可以追溯到1823年J.C.Warnsdorff解决马踏棋盘问题时给出的一个著名的算法。
⏹贪心方法应用的典型问题有背包问题、带有期限的作业排序、最小生成树、单源点最短路径等问题。
贪心方法的求解步骤⏹贪心方法是根据具体的问题:☐选取一种量度标准;☐按此标准对n个输入进行排序;☐按该顺序一次输入一个量;☐如果这个输入量和当前该量度意义下的部分最优解加在一起不能产生一个可行解, 则不把此输入加入到这个部分解中。
⏹这种能够得到某种量度意义下的最优解的分级处理方法就是贪心方法。
贪心方法设计求解的核心问题⏹贪心方法设计求解的核心问题是选择能产生问题最优解的最优量度标准。
⏹值得一提的是,把目标函数作为度量标准所得到的解也不一定是问题的最优解。
A(1)A(2)…A(n)次优解次优解最优解A 1(n)…A 1(1)量度标准1A 2(n)…A 2(1)量度标准2A k (n)…A k (1)……量度标准k按某种最优量度标准从A 中选择一个输入,把它赋值给x,并从A 中消去它。
Procedure GREEDY(A, n)//A(1:n)包含n 个输入//solution←Φ//将解向量solution 初始化为空//for i ← to n do x← SELECT(A)if FEASIBLE(solution,x)then solution←UNION(solution,x)endifrepeatreturn (solution)end GREEDY 算法5.1 贪心方法的抽象化控制判定x 是否可以包含在解向量中。
将x 与解向量结合并修改目标函数。
方法的缺点和优点⏹缺点:☐不是对所有问题都能得到整体最优解。
☐需要证明后才能真正运用到题目的算法中。
⏹优点:☐一旦经过证明成立后,它就是一种高效的算法。
☐策略的构造简单易行。
☐对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。
5.2 背包问题⏹问题描述⏹背包问题实例⏹背包问题的贪心算法⏹定理5.1问题描述已知有n 种物品和一个可容纳M 重量的背包,每种物品i 的重量为w i ,假定将物品i 的某一部分x i 放入背包就会得到p i x i 的效益(0≤x i ≤1,p i>0) ,采用怎样的装包方法会使装入背包物品的总效益为最大?极大化∑ p i x i 0≤x i ≤1, p i >0约束条件∑ w i x i ≤M w i >0, 1≤i≤n1≤i≤n1≤i≤n问题的形式化描述背包问题实例考虑下列情况下的背包问题:n=3,M=20,(p 1,p 2,p 3)=(25,24,15), (w 1,w 2,w 3)=(18,15,10)(x 1,x 2,x 3)∑w i x i ∑p i x i (1)按效益值的非增次序把物品放到包里。
(1,2/15,0)2028.2(0,2/3,1)2031(2)按物品重量的非降次序把物品放到包里。
(0,1,1/2)2031.5(3)按pi/wi 比值的非增次序把物品放到包里。
⏹即以目标函数为量度标准☐该标准使得背包每装入一件物品就获得最大可能的效益值增量。
☐结果是一个次优解,原因是背包容量消耗过快。
123i i i i (1,2/15,0)2028.2(0,2/3,1)2031(0,1,1/2)2031.5(1)按效益值的非增次序把物品放到包里。
(p1,p2,p3)=(25,24,15);(w1,w2,w3)=(18,15,10)。
(2)按物品重量的非降次序把物品放到包里。
⏹以容量为量度标准☐该标准使得背包每装入一件物品就获得最小可能的容量增量。
☐结果仍是一个次优解, 原因是容量在慢慢消耗的过程中, 效益值却没有迅速的增加。
⏹选效益值和容量之比为量度标准☐每一次装入的物品使它占用的每一单位容量获得当前最大的单位效益☐结果是一个最优解, 因为每一单位容量的增加将获得最大的单位效益值。
123i i i i (1,2/15,0)2028.2(0,2/3,1)2031(0,1,1/2)2031.5(p1,p2,p3)=(25,24,15);(w1,w2,w3)=(18,15,10)。
(3)按pi/wi 比值的非增次序把物品放到包里。
(p2/w2 , p3/w3 , p1/w1 )=(24/15, 15/10, 25/18)算法5.2 背包问题的贪心算法先将物品按pi/wi 比值的非增次序排序(降序)procedure GREEDY-KNAPSACK(P,W,M,X,n)real P(1:n), W(1:n), X(1:n), M, cu; integer i, n;X ←0cu ←Mfor i ←1 to n doif (W(i)>cu) then exit endif X(i) ←1 cu ←cu-W(i)repeatif (i ≤n) then X(i) ←cu/W(i)end GREEDY-KNAPSACK将解向量X 初始化为0cu 为背包的剩余容量放入物品i 的一部分若物品i 的重量大于背包的剩余容量,则退出循环若物品i 的重量小于等于背包的剩余容量,则物品i 可放入背包内如果物品事先按照效益值的非增次序或物品重量的非降次序。
那么利用算法5.2获得到的结果就是该量度意义下的最优解。
(p1,p2,p3)=(25,24,15), (w1,w2,w3)=(18,15,10)。
(p2/w2 , p3/w3 , p1/w1 )=(24/15, 15/10, 25/18)输入参数P=(24,15,25); W=(15, 10,18); M=20; n=3。
初始:X=(0, 0, 0); cu=20。
for 循环部分:(1) 15<cu ,then x(1)=1, cu=cu-w(1)=5;(2) 10>cu, then 跳出循环;结尾:x(2)= cu/w(2) = 0.5。
输入参数X=(1, 0.5, 0)。
运行过程如下最优解证明的基本思想⏹把这个贪心解与任一最优解相比较,如果这两个解不同,就去找开始不同的第一个x i ,然后设法用贪心解的这个x i 去代换最优解的那个x i ,并证明最优解在分量代换前后的总效益值无任何变化。
⏹反复进行这种代换, 直到新产生的最优解与贪心解完全一样, 从而证明了贪心解就是最优解。
定理5.1如果p1/w1≥ p2/w2 ≥ … ≥ p n/w n,则算法GREEDY-KNAPSACK对于给定的背包问题实例生成一个最优解。
证明: 设X=(x1,…,xn)是算法所生成的解。
1. 如果所有的x i 等于1,显然这个解就是最优解。
2. 否则,设j是使x j ≠ 1的最小下标, 由算法可知:对于1≤i<j , xi=1;对于j<i≤n , xi=0 ;对于i=j,0 ≤ xj<1。
3. 若X不是最优解, 则必存在一个最优解Y= (y1,…,y n),使得∑p i y i>∑p i x i。
假定∑wiy i=M,设k是使得y k≠ x k的最小下标,则可以推出yk<x k成立。
4. 现在, 假定把y k 增加到x k , 那么必须从(y k+1,…,y n)中减去同样多的量, 使得所用的总容量仍为M。
这导致一个新的解Z = (z1,…,zn),其中z i= x i, 1≤i≤k。
并且∑wi (y i-z i )= w k (z k-y k)k<i≤n三种可能发生的情况:(1).k<j;(2).k=j;(3).k>j5. 因此,对于Z 有∑p i z i =∑p i y i +(z k -y k )p k -∑(y i -z i )p i= ∑p i y i +(z k -y k )w k p k /w k -∑(y i -z i )w i p i /w i ≥∑p i y i +[(z k -y k )w k -∑(y i -z i )w i ]p k /w k= ∑p i y i 1≤i≤n1≤i≤nk <i≤n1≤i≤nk<i≤n1≤i≤n1≤i≤nk<i≤n所以∑p i z i ≥ ∑p i y i 成立6. 若∑p i z i >∑p i y i , 则Y 不可能是最优解。
所以∑p i z i =∑p i y i ,如果Z=X, 则X 就是最优解;否则Z≠X, 则重复上面的讨论,每次Y 中少一个和X 不同的值,最终把Y 转换成X ,从而证明了X 也是最优解, 证毕。
元素按p i /w i 非增次序排列。
5.3 带有期限的作业排序⏹问题描述⏹带限期的作业排序算法⏹定理5.2⏹定理5.3⏹算法5.4⏹算法5.5问题描述⏹假定只能在一台机器上处理n 个作业, 每个作业均可在单位时间内完成; 又假定每个作业i 都有一个截止期限d i >0(d i 是整数), 当且仅当作业i 在它的期限截止之前被完成时获得p i >0的效益。
⏹该问题的一个可行解是这n 个作业的一个子集合J, J 中的每个作业都能在各自的截止期限之前完成,可行解的效益值是J 中这些作业的效益之和∑p j 。
具有最大效益值的可行解就是最优解。
限制条件例5.2 n=4;(p1,p2,p3,p4) = (100,10,15,20),(d1,d2,d3,d4) = (2,1,2,1)。
可行解处理顺序效益值11100221033154420 1,22,1110 1,31,3115 1,44,1120 2,32,325 3,44,335带限期的作业排序算法的实现思想⏹为得到最优解, 贪心策略应制定一个量度标准, 使得所选择的下一个作业在这种量度下达到最优。
⏹选择目标函数∑p j作为量度标准, 使下一个要计入的作业是满足J是一个可行解的限制条件下使∑pj 得到最大增加的作业, 只需将各作业按效益pi降序排列即可, 即: p1≥ p2≥ …≥ p nJ中的每个作业都能在各自的截止期限之前完成。