- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《算法设计与分析》第06章《算法设计与分析》第06章
第6章 贪心法 6.1 一般方法 最优化问题(optimization problems)是指这样一类问题,问题给定某些约束条件(constraint),满足这些约束条件的问题解称为可行解(feasible solution)。通常满足约束条件的解不是惟一的。为了衡量可行解的好坏,问题还给出了某个数值函数,称为目标函数(objective function),使目标函数取最大(或最小)值的可行解称为最优解(optimal solution)。 6.2 背包问题 6.2.1? ?问题描述 6.2.2 贪心法求解 最优量度标准1:优先选择收益最大的物品放入背包,最后选择的物品可以部分装入, 最优量度标准2:优先选择重量小的物品放入背包,最后选择的物品可以部分装入, 最优量度标准3:优先选择单位重量收益最大的物品放入背包,即:按照pi/wi非增次序放入背包 6.2.3? 算法正确性 6.3 带时限的作业排序 6.3.1? 问题描述 6.3.2 贪心法求解 (p0,p1,p2,p3)=(100,10,15,27) (d0,d1,d2,d3)=(2,1,2,1), (p0,p3,p2,p1)=(100,27,15,10) X={0} X={0,3},X=(3,0) X={0,3,2}?,X=(3,0,2)/(3,2,0)/… ,都不可行。 X={0,3,1}?,X=(3,0,1)/(3,1,0)/… ,都不可行。 所以: X=(0,3)是最优解,收益值=127 6.3.3? 算法正确性 6.3.4? 可行性判定 6.3.5 作业排序贪心算法 作业:0,1,2,…,n-1 效益:p0=p1=p2=,…,pn-1 1、x0=0 x=(0)是可行解 2、x={0}+1=(x0,x1),dx0=dx1 最优排列 检查是否可行:dxi=i+1 可行则加入作业1 3、x={x0,x1,…,xk}+j=(x0,x1,…, j , …,xk+1), dx0=dx1 =…=dxk+1 最优排列 插入并检查是否可行解:假设j插入r处, 必须dj=r+1,dxi=i+1, r+1=i=k, 可行则加入作业j,不可行则不加入。 4、直到最后一个作业 6.3.6 一种改进算法 6.4 最佳合并模式 6.4.1 问题描述 6.4.2?贪心法求解 数据结构描述 6.4.3 算法正确性 6.5 最小代价生成树 6.5.1? 问题描述 6.5.2? 贪心法求解 图G=(V,E),生成树F=(U,S) Lowercost(i):表示i与生成树中的结点相连的边中最小的权值。 数组nearest(i): Lowercost (i)对应的结点 如果(u,v)是当前最小的边( u?U,v?V-U) 则:nearest(v)=u; lowercost(v)=w(u,v) 数组mark(v)表示结点v是否已进入生成树。 初始值:nearest(i)= -1;lowcost(i)=INFTY; mark(i)=false 6.5.4 克鲁斯卡尔算法 并查集:UFSet 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用森林来表示。 查找(FIND):查找元素所在的集合即根节点 合并(UNION):将两个元素所在的集合合并为一个集合 6.5.5 算法正确性 6.6 单源最短路径 6.6.1 问题描述 6.6.2 贪心法求解 数据结构 0 1 2 3 4 5 6 0 0 50 10 ∞ 70 ∞ ∞ 1 ∞ 0 15 ∞ 10 ∞ ∞ 2 0 50 10 ∞ 70 ∞ ∞ 3 0 50 10 ∞ 70 ∞ ∞ 4 0 50 10 ∞ 70 ∞ ∞ 5 0 50 10 ∞ 70 ∞ ∞ 6 0 50 10 ∞ 70 ∞ ∞ 求第一条最短路径 开始:S={s},s,i ∈E,d(i)=w(s,i), 否则:d(i)=∞ d(k)=min{d[i]},i ∈V-{s} 更新d(i) 和path
文档评论(0)