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

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

我看的版本是英文第三版 (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)运行时间相同时输入的规模即可
$\eqalign { 8 n^2 & = 64 n \lg n \\ n & = 8 \lg n \\ n & \approx 43 }$
所以,当n大于43的时候归并排序的效率要大于插入排序。


1.2-3
同1.2-2

$\eqalign { 100 n^2 & = 2^n \\ 100 * 14^2 & = 19600 > 16384 = 2^{14} \\ 100 * 15^2 & = 22500 < 32768 = 2^{15} }$

所以n=15为所求


1-1

 secondminutehourdaymouthyearcentury
$\lg n$$10^{10^9}$------
$\sqrt n$$10^{18}$$10^{22}$$10^{24}$$10^{28}$$10^{30}$$10^{32}$$10^{36}$
$n$$10^9$$10^{11}$$10^{12}$$10^{14}$$10^{15}$$10^{16}$$10^{18}$
$n \lg n$$10^8$$10^{10}$$10^{11}$$10^{12}$$10^{13}$$10^{14}$$10^{16}$
$n^2$$30000$$10^6$$10^6$$10^7$$10^7$$10^8$$10^9$
$n^3$$1000$$10^4$$10^4$$10^4$$10^5$$10^5$$10^6$
$2^n$$30$$38$$45$$50$$55$$59$$65$
$n!$$12$$13$$15$$16$$18$$19$$20$

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

转载于:https://www.cnblogs.com/Jiajun/archive/2013/05/02/3054925.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值