- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Ch-5贪心策略
第5章 贪心策略
5.1 概述
问题导入:找零钱问题
有4 种硬币,面值分别为2角5分、1角、5分和1分。现在要求以最少的硬币个数找给顾客6角3分。通常做法是:
先拿2个2角5 分的 + 1个1角 + 3个一分
这种找法所拿出的硬币个数最少。
这种算法其实就是贪心算法。(考虑动态规划法如何求解?)
顾名思义,该算法总是做出在当前看来最好的选择,并且不从整体上考虑最优问题,所做出的每一步选择只是在某种意义上的局部最优选择,逐步扩大解的规模。当然,希望贪心算法得到的最终结果也是整体最优的(上面的解法得到的恰好是最优解)。但未必总是得到最优解。
假如,面值有1角1分、5分和1分,要找给顾客1角5分。如果还是使用上述贪心算法,得到的解是:1个1角1分+ 4个1分。而实际上最优解是3个5分。
虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解,例如:单源最短路径问题、最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。
贪心法的难点在于它的正确性证明。
5.1 单源最短路径问题
G = (V, E) 是一个有向图,每条边上有一个非负整数表示长度值,其中有一个顶点称为源节点。所谓的单源最短路径问题就是:求解该源节点到所有节点的最短。不失一般性,假设V = {1,2,3,...,n} 并且s = 1。那么该问题可以使用Dijkstra算法来求解,该算法是一种贪心算法,并且能求得最优解。开始时,我们将所有的顶点划分为两个集合X = {1}, Y = {2,3,4,..,n}。所有已经计算好的顶点存放在X中,Y中表示还没有计算好的。Y中的每个顶点y有一个对应的量λ[ y],该值是从源顶点到y 并且只经由X中的顶点的最短路径。Dijkstra算法假设V = {1,2,3,...,n} 并且s = 1。选择一个λ[y] 最小顶点y∈Y,并将其移动到X 中。
y 被从Y 移动到X 中,Y 中每个和y 相邻的顶点w 的λ[w]都要更新表示经由y 到w 的一条更短的路径被发现
Dijkstra算法
X={1}; Y←V-{1}; λ[1]←0
for y←2 to n
if y 相邻于1 then λ[y]←length[1,y] //((n)
else λ[y]← ∞ //O(n)
end if
end for
for j←1 to n-1
令y∈Y, 使得λ[y]为最小的 //∑(n-i){i=1,…,n-1}= ((n2)
X←X∪{y} //((n)
Y←Y - {y} //((n)
for 每条边(y,w) //每条边恰好检查一次,((m), m=|E|
if w∈Y and λ[y]+length[y,w] λ[w] then
λ[w] ←λ[y]+length[y,w] //((m)
end if
end for
end for
算法的时间复杂度
((n)+ O(n)+ ((n2)+ ((n)+ ((n)+ ((m)+ ((m) = ((m+n2)
对于任意一个顶点 v∈V假如我们使用δ[v]表示源顶点到顶点v 的最短路径,可以证明上述的贪心法结束后有λ[v] = δ[v]
下面来证明使用该方法得到的是最优解,也就是λ[] = δ[y]。
证明: 归纳法
显然λ[1] = δ[1] = 0
假设当前将 移动到X 中,并且在y 之前移动到X 中的任何一个顶点c,都有λ[c] =δ [c]。由于λ[y] 是有限的,也就是说必定存在一条从1 到y 路径,长度为λ[ y](我们需要来证明λ[ y] =δ[ y])。
那么这条路径总可以写作:
1→[ ]→[ ]→…→[ ]→[ ]→[ ]→y
在上述序列中,我们总是可以找到一个顶点,不妨称之为xx∈ X), 使得x 之后的顶点均属于Y。
所以有以下两种情形:
π:1→[ ]→[ ]→…→[ ]→[x]→y (A)
或
π1→[ ]→[ ]→…→[x ]→[ ]…→y (B)
对于情形(A),
λy] ≤λ[x]+length[x, y] //算法要求=δ[x]+length(x, y) //归纳假设
=δ[y] π是最短路径
对于情形(B),我们将x之后的顶点不妨称之为w∈Y),即:
1→[ ]→[ ]→…→[x ]→[]…→y (B)
于是有:
λ[ y] ≤ λ[w] 由于y在w之前离开Y
≤ λ[x] + length(x,w) 算法要求
=δ[x] + length(x,w) //归纳假
您可能关注的文档
最近下载
- 家庭与社区的变化与发展.pptx VIP
- 丙肝防治培训课件.pptx VIP
- 《食物链》.ppt VIP
- 2025年辽宁丹东市融媒体中心招聘6人笔试模拟试题参考答案详解.docx VIP
- 2018湖北省市政工程定额(第十一册措施项目)PDF版.pdf VIP
- 4.1和面、揉面、饧面、搓条(课件)- 《中式面点制作基础教程》同步教学(劳保版).pptx VIP
- 2025年丹东市融媒体中心招聘考试笔试试题.docx VIP
- 铁路技术管理规程(普速铁路部分)题库 .pdf VIP
- 中国失眠症诊断和治疗指南(精选PPT).pptx VIP
- 2025年马鞍山市公安局第三季度招聘警务辅助人员139名笔试参考题库附答案解析.docx VIP
文档评论(0)