没有合适的资源?快使用搜索试试~ 我知道了~
贪心算法学习总结.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 171 浏览量
2022-05-26
15:52:10
上传
评论
收藏 524KB PDF 举报
温馨提示
试读
13页
。。。
资源推荐
资源详情
资源评论
----------------------------精品 word 文档 值得下载 值得拥有----------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
----
贪心算法
一、算法思想
贪心法的基本思路:
—-从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一
步不能再继续前进时,算法停止.
该算法存在问题:
1. 不能保证求得的最后解是最佳的;
2. 不能用来求最大或最小解问题;
3. 只能求满足某些约束条件的可行解的范围。
实现该算法的过程:
从问题的某一初始解出发;
while 能朝给定总目标前进一步 do
求出可行解的一个解元素;
由所有解元素组合成问题的一个可行解;
二、例题分析
1、[背包问题]有一个背包,背包容量是 M=150。有 7 个物品,物品可以分割成任意大小。
要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
物品
重量 wi
价值 pi
分析:
目标函数: ∑pi 最大
约束条件是装入的物品总重量不超过背包容量:∑wi<=M( M=150)
(1)根据贪心的策略,每次挑选价值最大的物品装入背包,得到的结果是否最优?
(2)每次挑选所占重量最小的物品装入是否能得到最优解?
(3)每次选取单位重量价值最大的物品,成为解本题的策略。 ?
值得注意的是,贪心算法并不是完全不可以使用,贪心策略一旦经过证明成立后,它就是一种高效的算法。
贪心算法还是很常见的算法之一,这是由于它简单易行,构造贪心策略不是很困难。
可惜的是,它需要证明后才能真正运用到题目的算法中。
一般来说,贪心算法的证明围绕着:整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。
对于例题中的 3 种贪心策略,都是无法成立(无法被证明)的,解释如下:
(1)贪心策略:选取价值最大者.反例:
W=30
物品:A B C
A
35
10
B
30
40
C
60
30
D
50
50
E
40
35
F
10
40
G
25
30
----------------------------精品 word 文档 值得下载 值得拥有----------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
----
重量:28 12 12
价值:30 20 20
根据策略,首先选取物品 A,接下来就无法再选取了,可是,选取 B、C 则更好.
(2)贪心策略:选取重量最小.它的反例与第一种策略的反例差不多。
(3)贪心策略:选取单位重量价值最大的物品。反例:
W=30
物品:A B C
重量:28 20 10
价值:28 20 10
根据策略,三种物品单位重量价值一样,程序无法依据现有策略作出判断,如果选择 A,则答案错误。
所以需要说明的是,贪心算法可以与随机化算法一起使用,具体的例子就不再多举了。(因为这一类算法普
及性不高,而且技术含量是非常高的,需要通过一些反例确定随机的对象是什么,随机程度如何,但也是不能
保证完全正确,只能是极大的几率正确)
三、贪心算法的基本要素
1、 贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择,即
贪心选择来达到。(与动态规划的主要区别)
采用自顶向下,以迭代的方式作出相继的贪心选择,每作一次谈心选择就将所求
问题简化为一个规模更小的子问题。
对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所
作的贪心选择最终导致问题的最优解。通常可以首先证明问题的一个整体最优
解,是从贪心选择开始的,而且作了贪心选择后,原问题简化为一个规模更小的
类似子问题。然后,用数学归纳法证明 ,通过每一步作贪心选择,最终可得到问
题的一个整体最优解。
2、最优子结构性质:包含子问题的最优解
1、 设有 n 个活动的安排,其中每个活动都要求使用同一资源,如演讲会场,而
在同一时间只允许一个活动使用这一资源 .每个活动都有使用的起始时间和结束
时间。问:如何安排可以使这间会场的使用率最高。
活动 起始时间 结束时间
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
----------------------------精品 word 文档 值得下载 值得拥有----------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
----
算法:一开始选择活动 1,然后依次检查活动 i 是否与当前已选择的所有活动相
容,若相容则活动加入到已选择的活动集合中,否则不选择活动i,而继续检查下
一活动的相容性.即:活动 i 的开始时间不早于最近加入的活动 j 的结束时间.
Prodedure plan;
Begin
n:=length[e];
a {1};
j:=1;
for i:=2 to n do
if s[i]>=f[j] then
begin a a
∪
{i};
j:=i;
end
end;
例 1
[找零钱] 一个小孩买了价值少于 1 美元的糖,并将 1 美元的钱交给售货员。
售货员希望用数目最少的硬币找给小孩.假设提供了数目不限的面值为 2 5 美分、
1 0 美分、5 美分、及 1 美分的硬币。售货员分步骤组成要找的零钱数,每次加
入一个硬币。选择硬币时所采用的贪婪准则如下:每一次选择应使零钱数尽量增
大。为保证解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不
应使零钱总数超过最终所需的数目。
假设需要找给小孩 6 7 美分,首先入选的是两枚 2 5 美分的硬币,第三枚入选的不能是 2 5
美分的硬币,否则硬币的选择将不可行(零钱总数超过 6 7 美分),第三枚应选择 1 0 美分
的硬币,然后是 5 美分的,最后加入两个 1 美分的硬币.
贪婪算法有种直觉的倾向,在找零钱时,直觉告诉我们应使找出的硬币数目最少(至少
是接近最少的数目)。可以证明采用上述贪婪算法找零钱时所用的硬币数目的确最少(见练
习 1)。
例 2 [机器调度] 现有 n 件任务和无限多台的机器,任务可以在机器上得到处理。每件任务
的开始时间为 si,完成时间为 fi ,si < fi .[si , fi ] 为处理任务 i 的时间范围.两个任务 i,j 重
指两个任务的时间范围区间有重叠,而并非是指 i,j 的起点或终点重合。例如:区间[ 1,4 ]
与区间[ 2,4 ]重叠,而与区间[ 4,7 ]不重叠。一个可行的任务分配是指在分配中没有
两件重叠的任务分配给同一台机器.因此,在可行的分配中每台机器在任何时刻最多只处理
一个任务.最优分配是指使用的机器最少的可行分配方案。
假设有 n= 7 件任务,标号为 a 到 g。它们的开始与完成时间如图 13—1a 所
示.若将任务 a 分给机器 M1,任务 b 分给机器 M2,。 。 .,任务 g 分给机器
M7,这种分配是可行的分配 ,共使用了七台机器 .但它不是最优分配,因为有其他
分配方案可使利用的机器数目更少,例如:可以将任务a、b、d 分配给同一台机
器,则机器的数目降为五台。
一种获得最优分配的贪婪方法是逐步分配任务 .每步分配一件任务,且按任
务开始时间的非递减次序进行分配。若已经至少有一件任务分配给某台机器 ,则
称这台机器是旧的;若机器非旧,则它是新的。在选择机器时,采用以下贪婪准
则:根据欲分配任务的开始时间,若此时有旧的机器可用,则将任务分给旧的机
器。否则,将任务分配给一台新的机器。
剩余12页未读,继续阅读
资源评论
苦茶子12138
- 粉丝: 1w+
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功