《算法导论》第一章心得及练习题

《算法导论》的第一章是简单的一些介绍,看了有一些个人的理解。

不是所有的问题都能在网上找到模版,这个我还是深有体会,学习算法的主要目的主要还是掌握解决问题的方法,这里说的掌握解决问题的方法指的是拥有独立设计和分析算法并且能解决实际问题的能力。我觉得这个应该是学习算法的首要目的。其次就是不断的进行时间和空间的优化。

练习及答案

1.1-1 给出现实生活中需要排序的一个例子或者现实生活中需要计算凸壳的一个例子。

排序的话例子有很多,比如说学生成绩的排榜,电话簿的排序… 凸壳有些不太好找,可以计算一个凸多边形的面积。

1.1-2 除速度外,在真实环境中还可能使用哪些其他有关效率的量度。

这个比如说需要的空间占用问题,事实上算法主要考虑的就是时空效率。

1.1-3选择一种你以前已知的数据结构,并讨论其优势和局限。

这个拿最简单的链表来举例吧,链表的话优势肯定是对于空间的利用率高于普通的顺序表,删除和添加节点的时间是常数级别的,但是链表毕竟是动态申请内存空间,这个动态申请的过程是比较慢的,大概比正常顺序申请空间要多耗时100倍左右的时间。再就是没有办法按照下标访问,那么访问一个节点的时间将达到线性的复杂度(请不要尝试着给链表赋下标,这是一个比较浪费而且有点蠢萌的行为)。

1.1-4 前面给出的最短路径与旅行商问题有哪些相似之处?又有哪些不同?

相似之处就是都是在求最短路径,不同的地方在于旅行商问题试求很多个最短路径,而最短路径就是求一个最短路径…

1.1-5 提供一个现实生活的问题,其中只有最佳解才行。然后提供一个问题,其中近似最佳的一个解也足够好。

最佳解的问题,比如说用1M的内存空间怎么给10^7这么多的数据排序,而且访存次数最少

近似解的问题,比如说小数的求精度问题,我们只需要让它在一定范围之内是正确的就可以。

1.2-1 给出在应用层需要算法内容的应用的一个例子,并讨论涉及的算法的功能。

比如说百度/google地图的自动计算路线,涉及到最短路径问题。

1.2-2 假设我们正比较插入排序与归并排序在相同机器上的实现,对规模为n的输入,插入排序运行8n^2步,而归并排序运行64nlgn步,问对哪些n值,插入排序优于归并排序?

这个要注意一下,在算导中lg代表的是以2为底…所以范围就是2 <= n <= 43。

1.2-3 n的最小值为何值时,运行时间为100n^2的一个算法在相同机器上快于运行时间为2^n的另一个算法?

n = 15为最小值

思考题的计算量委实…有点大,我只简单地算了几列,这里就不贴出来贻笑大方了。

本次的内容就这么多吧^_^

猜你喜欢

转载自blog.csdn.net/wind_s_road/article/details/86255557