2015武汉大学《算法设计与分析》期中试卷.docVIP

2015武汉大学《算法设计与分析》期中试卷.doc

  1. 1、本文档共10页,可阅读全部内容。
  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文档。上传文档
查看更多
2015武汉大学《算法设计与分析》期中试卷课案

武汉大学计算机学院 算法设计与分析 期中测试 姓名: 学号: 学院: 专业: 一、请用大“O(·)”记号求下列函数的渐进表达式:3n2 + 10n -1; n2/10 + 2n +1/n; 14 + 5/n + 1/n2 ; ; 20log3n(10分) 解答:上述渐进表达式的时间复杂度分别为: 3n2 + 10n =O(n2); n2/10 + 2n + 1/n =O(2n); 14 + 5/n + 1/n2=O(1); =O(logn); 20log3n =O(n) 二、 令{1},{2},{3},…,{}是n个单元素集合,每个集合由一棵仅有一个结点的树表示。按秩合并和路径压缩措施的UNION-FIND算法来执行以下操作序列,画出每一步操作完成后的树表示。(分)合并和查找操作序列如下所示:UNION(1,2UNION()UNION(5,)UNION(,8)UNION(,6)FIND(1)UNION(,8)UNION(,6)FIND();FIND() 三、 设有n个小球,其中一个是劣质球,其特征是重量较轻,给你一个天平,设计一个分治算法,找出劣质球。(总分15分) 写出算法的主要思路;(5分) 试分析算法的时间复杂度;(5分) 试分析n=9和10,即n分别为奇数和偶数,两种情形下的分治过程。(5分) 解法:(1)二对分算法思路: ①若小球个数≤2,则直接比较,找出假币。否则,转②。 ②若n%2=0,则将其分为个数相等的两部分,选择轻的部分保留,转①;否则转③。 ③将a[0…n-2]分为相等的两部分:若两部分重量相等,则a[n-1]为劣质球,终止;若不等,则保留轻的部分,转①。 (2)以比较操作为基本运算,最好情况比较1次,最坏比较logn次, (3)① 分成两部分:a[0…4]、a[5…9],假定后者轻,保留a[5…9] ② 分成三部分:a[5…6]、a[7…8]、a[9],若前两者一样重,故劣质球为a[9]。 四、 考试前,A老师给同学答疑,同一时间只能给一个同学答疑,有n个人等待答疑,已知每个人需要答疑的时间为ti(0i=n),请设计贪心算法安排排队次序,使每个人排队等候时间总和最小。(总分15分) 请写出两种以上的贪心策略,比较它们,选出一种用于贪心算法;(5分) 写出贪心算法的主要思路;(5分) 该算法一定能够保证排队时间总和最小?请简要说明理由。(5分) 解法: (1)答疑时间短先安排;答疑时间长先安排。 (2)本题贪心算法:n个人时间从小到大排序,就是这n个人最佳排队方案。求部分和的和即为所求。 (3)反证法证明:假设有最优解序列:s1,s2…sn,如s1不是最小的Tmin,不妨设sk=Tmin,将s1与sk对调,显然,对sk之后的人无影响,对sk之前的人等待都减少了,(s1-sk)0,从而新的序列比原最优序列好,这与假设矛盾,故s1为最小时间,同理可证s2…sn依次最小。 五、 在一个操场上一排地摆放着N堆石子,N堆石子的编号为1,2,(,N。现要将石子有次序地合并成一堆。每堆石子包含的石子个数给定,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。(总分20分) 假设要求计算出将N堆石子合并成一堆的最小得分值,已知该问题可以采用动态规划来进行求解,试写出你的动态规划算法的递归方程,并分析该递归方程能否采用递归程序来实现;(5分) 试设计一个动态规划程序(伪代码即可),计算出将N堆石子合并成一堆的最小得分值;(5分) 试分析第(2)问中你设计的动态规划算法的时间复杂度;(5分) 如果要得到取得最小得分的合并方案,将如何修改程序,使之能够输出最优的合并方案,并分析该方法的空间复杂度(注意:最优合并方案的表示可以采用加括号的方式表示)。(5分) 参考答案:注意,本题会有多种解法,参考答案仅仅是一种,改卷子时一定要看清楚 设S(i)表示前i堆石子总的数量(也即价值之和),f[i][j]表示把第i堆到第j堆的石头合并成一堆的最优值。则递推方程为: -----------------------得分3分 由于该递推方程递推下去包含有大量重叠子问题,所以不能直接采用递归算法来实现,递归的算法复杂度为: -----------------------得分2分 算法分为初始值赋值和循环两个评分点,算法的伪代码为; Algorithm dd() { for (i=1; i=n; i++) f[i][i]=0; //可能超出int的范围

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档