第十章 算法分析与设计.pptVIP

  1. 1、本文档共78页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 算法分析与设计

第十章 算法分析与设计 读者在学习以前各章的基础上,系统地阅读本章,可对算法的设计和分析技术有一个鸟瞰,以便于将本书所学到的算法归类整理,达到开阔思路,提高观点,增强兴趣的目的。 目录 10.1 算法分析技术 10.1.1 空间代价分析 10.1.2 时间代价分析 10.2 算法设计技术 10.2.1 分治法 10.2.2 贪心法 10.2.3 动态规划法 10.2.4 回溯法 10.2.5 分枝界限法与0/1背包问题* 10.1 算法分析技术 评价一个算法的代价,主要看执行算法时所需要占用的计算机空间的大小和计算过程需要花费的计算机CPU时间的多少。 算法的分析主要包含时间和空间两个方面。 10.1.1 空间代价分析 根据算法执行过程中对存储空间的使用方式,可以把对算法空间代价分析分成两种:静态分析和动态分析。 静态分析 一个算法静态使用的存储空间,称为静态空间。 静态分析的方法比较容易,只要求出算法中使用的所有变量的空间,再折合成多少空间存储单位即可。 例10.1 直接插入排序的空间代价分析(参看算法8.1) 被排序的记录的个数n决定了问题的规模。 被排序的对象在调用函数中申请,并用一个指针变量pvector传递给被调函数,空间大小显然是O(n); 在排序程序中,算法以静态方式定义了两个整型变量i和j、一个存储插入元素的临时变量temp,所以在算法中分配的空间为一个 常量,记为O(1)(对于常量c而言,O(c)与O(1)为相同复杂度)。 动态分析 一个算法在执行过程中,必须以动态方式分配的存储空间是指在算法执行过程中才能分配的空间称为动态空间。 动态空间的确定主要由两种情况构成: (1)函数的递归; (2)执行动态分配函数。 函数的递归调用 对于递归函数而言,由于每次调用需要分配不同的运行空间,所以递归函数的空间代价,不能简单地采用静态分析方法。 假设静态分析一个递归函数的空间代价为一个常量c,如果递归深度为h(h的大小依赖于程序的动态执行),动态空间代价应该为C*h。 例10.2 快速排序(参看算法8.8) 对函数静态分析的空间与待排序记录的个数n无关,为一常量。递归深度h最大等于n,这时动态空间代价为O(n);若每次都选较短的部分先处理,则递归深度不会超过log2n,这时动态空间代价即为O(log2n)。 执行动态分配函数 一个函数(或过程)如果使用了malloc和free函数,malloc和free所开辟、释放的空间只能在算法执行过程中加以确定,这些空间属于动态空间。 下面的讨论中,假设每次分配的空间与问题规模无关,只是一个常数C。 没有使用free函数 动态空间代价为O(k),k为使用malloc的次数(包括在循环和递归调用中动态执行的次数)。 使用free函数 设free使用次数为j。 令:c0=1, pi(i=1..j)为第i-1次使用free和i次使用free之间 执行malloc的次数。 用公式ci=ci-1+ p i-1 可以计算出在第i-1次使用free和第i次使用free(i=1..j)之间使用的最大动态空间数。 再定义j’如下: 于是整个算法使用的动态空间代价为: 例10.3 一个算法执行过程中malloc和free顺序为(n代表malloc,d代表free)。 nnnddnddnnndndd, j=j’=7 C0 =1, C1=3, C2=2, C3=2, C4=1, C5=3, C6=3, C7=2。 10.1.2 时间代价分析 算法的执行时间绝大部分花在循环和递归上。 循环 循环语句的时间代价一般用以下三条原则分析: (1) 对于一个循环,循环次数乘以每次执行简单语句的数目即为其时间代价。 (2) 对于多个并列循环,可先计算每个循环的时间代价,然后按大O表示法的加法规则计算总代价。 (3)? 对于多层嵌套循环,一般可按大O表示法的乘法规则计算。但如果嵌套是有条件的,为精确计算其时间代价,要仔细累加循环中简单语句的实际执行数目,以确定其时间代价。 例10.5 求带权图中每一对结点之间的最短路径的算法的时间代价(参看算法9.7)。 解 问题规模:带权图顶点数目为n。算法中共有五个循环,前两个循环与后三个是并列

文档评论(0)

118zhuanqian + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档