算法导论课后习题解析 第一章

算法导论课后习题解析 第一章

最近开始看算法导论了,但是发现官方给的参考答案只涵盖了一部分的习题,所以把自己做的答案分享一下,如有错误之处尽管指出,希望通过这个过程能与大家共同进步

我看的版本是英文第三版 (Introduction to Algorithms, Third Edition),所有的题目分为每一节后的练习(Exercises)和每一章后的问题(Problems),所有的题目编号都按照书上的编号来。比如1.1-1表明第一章第一节的练习题第一题,1-1表明第一章的问题的第一题。


1.1-1
需要排序的问题现实中一抓一大把,比如NBA常规赛东西部前八名才能进季后赛,那么要找出前八名来,就得按积分排序了。
再比如要使用二分查找,就必须对一个有序的序列进行,为了保证序列有序,就得进行排序了。
总之,排序算法是非常基础的算法,很多算法都需要依赖于排序的结果或者思想。


1.1-2
除了运行速度,需要的存储空间也是非常重要的性能指标。比如说你发明了一个算法对于某个输入能在10s内执行完毕,需要1K的内存,而别人的算法能在5s钟内完成,却需要1G的内存,在存储空间非常有限的情况下你的算法是非常有意义的。


1.1-3
以顺序表为例

  • 优点:实现简单,不需要额外空间开销,能够随机访问元素,在尾部添加删除效率很高,连续存放不易产生内存碎片
  • 缺点:在中间插入或删除需要移动后面的元素,最大容量难以改变


1.1-4
最短路径(shortest-path)和旅行商(traveling-salesman)问题都是图的经典问题,都需要找到一个满足要求的图的定点序列,使得该序列间边的权重和最小。
它们的不同之处在于复杂度,最短路径的复杂度为多项式复杂度,而旅行商的复杂度为阶乘复杂度,属于NP-complete问题。


1.1-5
需求最佳解(best solution)的问题有很多,比如上面提到的排序问题,只有积分前8的球队才能进入季后赛,而不可能是积分接近前八的球队进入季后赛。
只需要接近解(approximately)的问题也很多,比如我们去买苹果,我们不需要对所有的苹果按照质量好坏进行排序,只需要挑出比较好的几个即可。


1.2-1
比较多个文件是否完全相同可以先对每个文件按照某种hash算法生成一个key,然后比较每个文件生成的key来检查文件是否相同。
常用的hash算法有MD5和SHA1。


1.2-2
算出插入排序(insertion sort)和归并排序(merge sort)运行时间相同时输入的规模即可
8n2nn=64nlgn=8lgn43 8n2=64nlg⁡nn=8lg⁡nn≈43
所以,当n大于43的时候归并排序的效率要大于插入排序。


1.2-3
同1.2-2

100n2100142100152=2n=19600>16384=214=22500<32768=215 100n2=2n100∗142=19600>16384=214100∗152=22500<32768=215

所以n=15为所求


1-1

  second minute hour day mouth year century
lgn lg⁡n 10109 10109 - - - - - -
n n 1018 1018 1022 1022 1024 1024 1028 1028 1030 1030 1032 1032 1036 1036
n n 109 109 1011 1011 1012 1012 1014 1014 1015 1015 1016 1016 1018 1018
nlgn nlg⁡n 108 108 1010 1010 1011 1011 1012 1012 1013 1013 1014 1014 1016 1016
n2 n2 30000 30000 106 106 106 106 107 107 107 107 108 108 109 109
n3 n3 1000 1000 104 104 104 104 104 104 105 105 105 105 106 106
2n 2n 30 30 38 38 45 45 50 50 55 55 59 59 65 65
n! n! 12 12 13 13 15 15 16 16 18 18 19 19 20 20

带'-'的表示数量太大,已经没有意义了。
这道题主要是让大家直观地了解各个复杂度随输入增长的变化程度。

你可能感兴趣的:(算法导论课后习题解析 第一章)