- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。 贪心法要求每次在构造部分解的时候都挑一个最好的部分解。 背包问题中什么是最好的部分解 单位价值最大的物品即为最好的部分解 因此在背包问题中每次都挑当前单位价值最大的物品,并尽可能多的放入包中。 n=3 w={10,20,30} v={60,100,120} c=50 单位价值V/w={6,5,4} 因此第一次挑一号物品,全部装入r=40,pv=60 第二次挑2号,全部装入r=20,pv=160 第三次挑3号,部分装入r=20,pv=160+80=240 对于0-1背包问题,贪心选择不一定得到最优解。 如:n=3 w={10,20,30} v={60,100,120} c=30 按贪心法:选择最有价值的放入 全部放入第3个物品,价值120,但这并不是最好的 1,2 物品的放入,总价值160 因为物品要么选,要么不选,尽管每次选最有价值的物品,却无法保证背包单位重量的价值最高,所以总重量价值最高。 事实上,在考虑0-1背包问题时,应比较选择该物品和不选择该物品所导致的最终方案,然后再作出最好选择。 由此就导出许多互相重叠的子问题。这正是该问题可用动态规划算法求解的另一重要特征。 实际上也是如此,动态规划算法的确可以有效地解0-1背包问题。 贪心算法以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。 如:0-1背包问题 max(i,j)表示在i个物品中挑选物品放入容量为j的背包的最大物品价值。假设有n个物品 max(n,j)-maxValue(n)+ max(n-1,k)- maxValue(n)+ maxValue(n-1)+ max(n-2,q)… n=3 w={30,20,10} v={120, 100,60} c=50 动态规划解0-1背包:m(i,j)是背包容量为j,可选择物品为1, 2,…,i时的最优值 注意:分析是从顶向下分析,但写程序时是从底向上进行。 m(3,50) m(2,50) m(2,40)+60 m(1,50) m(1,30)+100 m(1,40)+60 m(1,20)+60+100 课堂练习 给图的所有结点着色,限制为 ①一条边的两个端点不能用同样的颜色, ②要求所使用的不同颜色的数目最小。 1 2 3 4 5 有5个结点的图。将结点任意编号为1至5.然后按编号给结点着色, 从贪婪法观点考虑,每次给尽可能多的结点着色。 首先用颜色1,可给节点1和2着色。 现在必须更换颜色,颜色2可给结点3和4着色。 这时又不得不换颜色,颜色3给结点5着色。 但很显然,更好的办法只要两种颜色,一种给结点1、3、4着色,另一种给结点2、5着色。 贪心法要素总结(参考) (1)明确目标函数和约束条件 (2)制定部分解结构。 确定如何将待解问题分解成若干步骤 Prim算法:最小生成树的子树 背包问题:一部分一部分装入 (3)确定贪心策略 扩大部分解的方法,一般涉及极值选择 (4)确定候选集 明确贪心的选择范围 (5)调整候选集 (6)正确性证明 换一个解释(从森林的角度): 初始时,有|V|个树构成的森林 最终的森林由单独的树构成 每次迭代中新边的加入等价于从图中找到一条边,当顶点分别属于不同的树时,选取该边,使两棵树变为一棵更大的树。 通过union-find(并查)算法实现,对两个顶点是否属于同棵树(集合)的考察 9.3 单源最短路径 给定带权有向图G =(V,E),其中每条边的权是非负实数。 给定V中的一个顶点,称为源。 计算从源到所有其他各顶点的最短路径长度。 这里路径的长度是指路径上各边权之和。 这个问题通常称为单源最短路径问题。 1.算法基本思想 Dijkstra算法是解单源最短路径问题的贪心算法。 9.3 单源最短路径 对右图中的有向图,如何考虑用贪心法获得从源顶点1到其他顶点间最短路径 设置顶点集合S并不断地作贪心选择来扩充这个集合。 一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。 初始时,S中仅含有源。 设u是G的某一个顶点,把从源到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组dist记录当前每个顶点所对应的最短特殊路径长度。 Dijkstra算法每次从V-S中取出具有最短特殊路长度的顶点u,将u添加到S中,同时对数组dist作必要的修改。一旦S包含了所有V中顶点,dist就记录了从源到所有其他顶点之间的最短路径长
您可能关注的文档
最近下载
- 心理卫生与心理咨询00284.pdf VIP
- 新高一,第一次月考反思总结-高一上学期主题班会课件.pptx VIP
- 22-23年九上《道德与法治》期中试卷.pdf VIP
- 国开(SC)-安全原理-第4次形考作业-学习资料.docx VIP
- 道路交通信号灯设置与安装规范 GB14886-2016.docx VIP
- 最新苏教版六年级数学下册第一单元测试题.doc VIP
- 六年级语文质量分析语文工作总结PPT.pptx
- 2025至2030中国增塑剂(塑化剂)行业发展趋势分析与未来投资战略咨询研究报告.docx
- 智能学习环境构建在初中物理教学中的应用与效果评价教学研究课题报告.docx
- 2025民营经济促进法与案例讲座课件PPT.pptx
文档评论(0)