网站大量收购独家精品文档,联系QQ:2885784924

田翠华著《算法设计与分析》课后习题参考答案.doc

田翠华著《算法设计与分析》课后习题参考答案.doc

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课后练习答案是本人精心整理的专业学科课后习题答案,可在线免费浏览全文并供大家下载。另外本网提供大学各专业教材各册不同版本作者主编的课后习题参考答案,不同版本版次,第N册练习题目习题及答案

参考答案 第1章 一、选择题 1. C 2. A 3. C 4. C A D B 5. B 6. B 7. D 8. B 9. B 10. B 11. D 12. B 二、填空题 1. 输入;输出;确定性;可行性;有穷性 2. 程序;有穷性 3. 算法复杂度 4. 时间复杂度;空间复杂度 5. 正确性;简明性;高效性;最优性 6. 精确算法;启发式算法 7. 复杂性尽可能低的算法;其中复杂性最低者 8. 最好性态;最坏性态;平均性态 9. 基本运算 10. 原地工作 三、简答题 1. 高级程序设计语言的主要好处是: (l)高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作; (2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高; (3)高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可移植性好、重用率高; (4)把复杂琐碎的事务交给编译程序,所以自动化程度高,发用周期短,程序员可以集中集中时间和精力从事更重要的创造性劳动,提高程序质量。 2. 使用抽象数据类型带给算法设计的好处主要有: (1)算法顶层设计与底层实现分离,使得在进行顶层设计时不考虑它所用到的数据,运算表示和实现;反过来,在表示数据和实现底层运算时,只要定义清楚抽象数据类型而不必考虑在什么场合引用它。这样做使算法设计的复杂性降低了,条理性增强了,既有助于迅速开发出程序原型,又使开发过程少出差错,程序可靠性高。 (2)算法设计与数据结构设计隔开,允许数据结构自由选择,从中比较,优化算法效率。 (3)数据模型和该模型上的运算统一在抽象数据类型中,反映它们之间内在的互相依赖和互相制约的关系,便于空间和时间耗费的折衷,灵活地满足用户要求。 (4)由于顶层设计和底层实现局部化,在设计中出现的差错也是局部的,因而容易查找也容易纠正,在设计中常常要做的增、删、改也都是局部的,因而也都容易进行。因此,用抽象数据类型表述的算法具有很好的可维护性。 (5)算法自然呈现模块化,抽象数据类型的表示和实现可以封装,便于移植和重用。 (6)为自顶向下逐步求精和模块化提供有效途径和工具。 (7)算法结构清晰,层次分明,便于算法正确的证明和复杂性的分析。 3. 算法的复杂度是算法运行所需要的计算机资源的量。 4. 当问题的规模递增时,将复杂度的极限称为渐进复杂度。 5. 采用复杂性渐近性态替代算法复杂度,使得在数量级上估计一个算法的执行时间成为可能。 四、计算题 1. 验证下面的关系: O(1)O(logn)O(n)O(nlogn)O(n) 及 O(2n)O(n!)O(nn)。 证明1:数学归纳法。 证明2:反证法。 证明3:定义证明 令f1(n)= O(1)f2(n)= O(logn),f3(n)= O(n),f4(n)= O(nlogn),f5(n)= O(n2)。 根据|f(n)| = |O(g(n))|定义,可知一定存在两个正的常数C和n0,使得对所有的n≥ n0,有f(n) ≤ C g(n) 。 那么,就有f1(n) ≤ C1,f2(n) ≤ C2 logn,f3(n) ≤ C3 n,f4(n) ≤ C4 nlogn,f5(n)≤ C5n2。 所以,O(g(n))之间的比较可以通过f(n)之间的比较得以实现。 而当n≥ n0时,C1 C2 logn C3 n C4 nlogn C5 n2成立。 再根据O(g(N))表示所有f(N)增长的阶不超过g(N)的函数的集合,它用以表达一个算法运行时间的上界。 则f1(n)的上界 f2(n)的上界 f3(n)的上界 f4(n)的上界 f5(n)的上界 那么就验证了 O(1)O(logn)O(n)O(nlogn)O(n)。 同理,有:O(2n)O(n!)O(nn)。 证明4:极限法(通常使用罗比塔法则)。 2. 找出下述证明中的错误:因为n= O(n),2n= O(n),…,故: 解答:概念不清。 n= O(n),2n= O(n),…,是集合,是说n,2 n,…,的阶是n,不是数值上相等。 是数值求和,即首项为n的n项等差为n的数列求和 所以,。应该是: = 1 n +2 n +3 n +……+nn= n(n+1)n/2 ,而 = O(max(1 ,2 ,3,4 ,…,n)) // 根据性质O(f)十O(g)=O(max(f,g)) = O(n) //集合操作,上界的并取最大者 3. 求以下各式的渐进表达式: 5 n2+8 n ,3n2/11 + 3n ,56 + 3/ n ,logn5 ,6 log4 n。 解答: 5n2+8 n =

文档评论(0)

你好世界 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档