第5章算法基础.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贪心法 (Greedy Algorithm) 贪心算法的基本思想是从小的方案推广到大的解决方法。它分阶段工作,在每一个阶段选择最好的方案,而不考虑其后的结果如何。 贪心法主要用于求解最优问题,但它已经发展成为一种通用的算法设计技术:核心是: 可行性——每一步选择必须满足问题的约束; 局部最优——它是当前可选择的方案中最优的; 不可取消性——选择一旦做出,在算法的其后步骤中不能被取消。 贪心法不能确定得到的最后解是最优的,也不能用于求解最大或最小问题。在算法的效率上,贪心法快速,程序实现需要的内存开销也较小。但遗憾的是,它们往往是不正确的。然而一旦被证明是正确的,其执行效率和速度有很大的优势。 30 ? 背包问题(分数背包问题) 假设有一个体积为M的背包以及n种物品,价值是 pi的第i 种物品的体积是 wi 。假设每种物品都可以取其一部分装入背包, xi 是取第i 种物品装进背包的百分比, 那么装入背包的总价值是 pi xi 。 所谓一个最优装包方法,就是要找到一组 xi 使得在约束条件 下,背包中物品总价值 达到最大。 Q: 每步该做些什么? A: 把某种物品的一部分放进包里. Q: 以什么标准来确定“贪心”? ? 最大价值 ? 最小体积 ? 最大的价值密度pi / wi 例如 : n = 3, M = 20, (p1, p2, p3) = (25, 24, 15) (w1, w2, w3)= (18, 15, 10) 答案是...? ( 0, 1, 1/2 ) P = 31.5 * 分治法 (Divide and Conquer ) 基本思想就是,将一个较大规模的问题分解为若干个较小规模的子问题,找出子问题的解,然后把各个子问题的解合并成整个问题的解。 分治法的分(Divide)是指划分较大问题为若干个较小问题,递归求解子问题;分治法的治(Conquer)是指从小问题的解构建大问题的解。 L型三方块覆盖方阵问题 金块问题 求一个整数序列的第k个大数问题 分治法的实现很可能可以采用递归的形式 32 金块问题: (挑出最重和最轻的两个金块) n=8时,普通方法需要的比较次数:(n-1)+(n-2) = 13。 分治法的比较次数: 8 4 4 2 2 2 2 L H L H L H L H L H L H L H 比较次数 4 4 2 10 n=16时,普通方法需要的比较次数: (n-1)+(n-2) = 29。 分治法的比较次数:10+10+2 = 22 C(n) = 2 C(n/2) + 2 (当n2) = 3n/2 -2 (当n为2的幂) 33 S N个元素 S1 N1个元素 S2 N2个元素 元素 e 元素 e ? 基于问题分解 ?求解集合S的第K大整数问题的一种递归思路 e N0个 基准元素e 元素 = e 当kN0+N1时,转化成:求S2的第k - (N0+N1)个大问题 当k=N1时,转化成:求S1的第k 个大问题 当N1k=N0+N1时,S的第k个大整数就是e * 动态规划法 (Dynamic Programming) 动态规划被描述为:如果一个较大问题可以被分解为若干个子问题,且子问题具有重叠,可以将每个子问题的解存放到一个表中,这样就可以通过查表解决问题。 核心思想是以空间换时间! 第n个Fibonacci数的计算 0-1背包问题 钢条切割问题 35 第n个Fibonacci数的计算 F(N) = F(N – 1) + F(N – 2) int Fib( int N ) { if ( N = 1 ) return 1; else return Fib( N - 1 ) + Fib( N - 2 ); } F6 F2 F1 F0 F3 F1 F2 F1 F0 F2 F1 F0 F3 F1 F2 F1 F0 F3 F1 F2 F1 F0 F4 F4 F5 麻烦之处: 大量重复子问题的计算,计算量呈爆发式增长! 解决方法: 从小算到大,记录最近两个数据,就可以计算后一个数据。 36 钢条切割问题 长度: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 价格: 1 | 5 | 8 | 9 |10|17|17

您可能关注的文档

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档