没有合适的资源?快使用搜索试试~ 我知道了~
算法设计与分析:穷举法、贪心法、分枝限界法讲稿.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 138 浏览量
2022-05-06
13:40:56
上传
评论
收藏 149KB DOC 举报
温馨提示
试读
11页
算法设计与分析:穷举法、贪心法、分枝限界法讲稿.doc
资源推荐
资源详情
资源评论
算法设计与分析
——— 穷举法、贪心法、分枝限界法讲稿
一、穷举法(枚举法)
(一)算法思路
就是从可能的解的集合中一一枚举各元素,用题目给定的检验条件,判定哪些是无用
的,哪些是有用的。能使命题成立,即为其解。
(二)例子(第二章介绍过的货郎担问题)
假定以编号为 1 的城市为始发城市,那么就会有 4!=24 个不同的路线,我们只要列
举出每一条路线并分别计算出相应的费用即可。从中就可以找出最小费用及对应的路线。
(三)算法复杂度:O(n!)
(四)算法评价
优点:可得到精确值。当 n 较小时,是可行的;
缺点:较笨拙,由于须列举所有情况,且记录下每次的情况,需要大量的机时和内存
空间。当 n 较大时,该算法是不可行性的。
二、贪心法
贪心法是一种对某些求最优解问题的更简单、更迅速的设计方法。
(一)引言
在给出贪心法的具体定义和算法步骤之前,我们先来看两个例子。
例 1 假设有 4 种硬币,它们的面值分别为 1 角、5 分、2 分和 1 分。现要找给某顾客 3
角 7 分钱,这时,我们几乎不假思索地拿出 3 个 l 角、1 个 5 分和 1 个 2 分的硬币交给顾客。
我们不仅能很快决定要拿哪些硬币,而且与其它找法相比.我们拿出的硬币的个数肯定是
最少的。
在这里,我们实际使用了这样的算法:首先选出一个面值不超过 3 角 7 分的最大硬币(1
角),然后从 3 角 7 分中减去 1 角,剩下 2 角 7 分再选出一个不超过 2 角 7 分的最大硬币(另
一个 1 角),如此做下去,直到找足 3 角 7 分。
例 2 如图 1—1,其中,顶点可解释为城市,边上的代价可解释为两城市问的里程。在
图中找一条经过所有结点一次的回路,并使里程的总和为最小。这同样还是货郎担问题。
在解此题时,我们可以按这样一个想法去做:
首先在图中选一条代价最小的边。为了选择下一条边,先要检查一下候选边与已选入的
边之间是否满足以下两点:
1)不会有三条边(候选边及已入选边)与同一顶点相关联。
2)不会使入选边形成回路,除非入选边的个数已等于图中的顶点总数。
在满足以上两点的候选边中,挑选最短的边作为入选边。如此做下去,直到得到一个
经过所有顶点的回路。
1
图 1-1
最后求得的回路是 1—2—5—3—4—1,代价是 14。实际图 1—1 最小代价的回路是 1—
2—5—4—3 一 1,代价是 10。
在这两个例子中,我们使用的方法就是贪心法。
(二)问题的定义
事实上,贪心法是我们经常自觉使用的一种方法。下面我们从一般意义上再来认识一
下贪心法。在现实世界中,有这样的一类问题,它有 n 个输入,而它的解由这 n 个输入的
某个子集组成,只是这个子集必须满足某些事先给定的条件。我们把那些必须满足的条件
称为约束条件,而把满足约束条件的子集称为该问题的可行解。显然,满足约束条件的子
集可能不止一个,因此,可行解一般来说是不唯一的。为了衡量可行解的优劣,事先也给
出了一定的标准。这些标准一般以函数形式给出,这些函数称为目标函数。那些使目标函
数取极值(极大或极小)的可行解,称为最优解。对于这一类需求最优解的问题,又可以根
据描述约束条件和目标函数的数学模型的特性或求解问题方法的不同进而细分为线性规划、
整数规划、非线性规划和动态规划等问题。尽管各类规划问题都有求解本类问题的一些基
本方法,但对于其中的某些问题,则可用一种更直接的方法来设计求解,这种方法就是贪
心法。
(三)算法思想
从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当
达到某算法中的某一步不能再继续前进时,算法停止,得到问题的一个解。
(四)实现该算法的过程
贪心法是一种改进了的分级处理方法。它首先根据题意,选取一种量度标淮。然后将
这 n 个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。如果这个输入
和当前已构成在这种量度意义下的部分最优解加在一起不能产生一个可行解,则不把此输
入加到这部分解中。要注意的是,对于一个给定的问题。往往可能有好几种量度标准。初
看起来,这些量度标准似乎都是可取的。但实际上,用其中的大多数量度标准作贪心处理
所得到该量度意义下的最优解并不是问题的最优解,而是次优解。尤其值得指出的是,把
目标函数作为量度标准所得到的解也不一定是问题的最优解。因此,选择能产生问题最优
解的最优量度标准是使用贪心法的核心问题。在一般情况下,要选出最优量度标准并不是
一件容易的事,不过,一旦对某问题能选择出最优量度标准。用贪心法求解则特别有效。
贪心法可以用下面的抽象过程来描述。
Procedure Greedy (A,n);
{A[1...n]包含 n 个输入}
begin
solution {将解向量 solution 初始化为空}
2
for i1 to n do
[xselect (A);
if feasible (solutioin ,x) then
solution union (solution,x)];
return (solution )
end;{Greedy}
函数 select 的功能是按某种量度标准从 A 中选择一个输入,把它的值赋给 x 并从 A 中
消去它。feasible 是一个布尔函数,它判定 x 是否可以包含在解向量中,union 将 x 与解向
量结合并修改目标函数。过程 Greedy 描述了用贪心法设计算法的主要工作和基本控制路线。
一旦给出一个特定的问题,就可将 select、feasible 和 union 具体化并付诸实现。
(五)算法评价
优点:简单、快捷;
存在问题:
1)不能保证求得的最后解是最佳的;
在第一个例子中,解是最优的。在第二个例子中,解不是最优的。这一点也是我们要
强调的。即贪心法并不保证求得全局最优解。在例 2 中,我们可以看到,在产生回路的过
程中,总是从已入选的顶点中寻求连向未入选的顶点,以得代价最小的边,这样就使一些
代价较小的边可能并不能入选,从而造成结果不是最优。可以看出,具体到每一步,贪心
法做出的选择只是某种意义上的“局部最优选择”、最终结果一般不一定是最优的。例 1 找
钱的贪心算法结果之所以是最优的,是由于硬币面值的特殊性。如果现在硬币的面值分别
是 1 角 1 分、7 分、5 分和 1 分,按贪心法拿出的硬币是 3 个 1 角 1 分和 4 个 1 分,共 7 枚。
这比 2 个 1 角 1 分和 3 个 5 分至多 2 枚。这是由于我们总是从局部的最优出发,没有看到全
局的情况,致使目光短浅,欲速不达。也正是由于它不再去看全局,使得这一方法成为简
单、快捷的方法。对于某些问题,我们并不知道是否能用贪心法得出最优解。但一般使用
贪心法会很快得到问题的“满意”解(即次优解)。如果一个问题的最优解只能用穷举法得到,
那么用贪心法(或其它启发式方法)去寻找问题的次优解就是唯一可行的方法了。
2)只能求满足某些约束条件的可行解的范围。
(六)具体实例
例 1:五个城市的售货员问题。
费用矩阵和无向网络如下:
1 2 3 4 5
∞
1 2 7 5
1
∞
4 4 3
2 4
∞
1 2
7 4 1
∞
3
5 3 2 3
∞
3
剩余10页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
- 123321123323211
- yolov8实战第八天-pyqt5-yolov8实现车牌识别系统(论文(约7000字)+数据集+完整部署代码+代码使用说明)
- 三相桥式全桥整流电路MATALB Simulink仿真文件
- ABB机器人操作培训文档
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功