算法导论读书笔记1

本人兴趣范范,各种东西喜欢捣鼓捣鼓,深知不深入一门技术无法立足于世,不过,广阔的兴趣也很好,至少对什么都保持一份3分钟的热度,但是还是需要持之以恒!自勉。

第1章算法在计算中的作用

(1)算法概念:

输入+定义良好的过程+输出=算法

(2)练习答案:

1.1-1:给出一个真实世界的例子,其中包含着下列的某种计算问题:排序,确定多矩阵的最佳顺序,或者找出凸壳。

排序:其实排序的例子很简单,比如班级成绩的排序;

确定多矩阵的最佳顺序:比如给定矩阵A1*A2*A3=?

如果A2*A3为单位矩阵了而A1*A2并不是单位矩阵,那么我们就需要先进行A2*A3的计算,这样可以减少运算量

凸壳:也就是找出凸多边形的问题,这里我的例子是书中的例子:即给定一些钉好的钉子,然后用这些钉子组成凸多边形,如何组成。

 

1.1-2除了运行速度以外,在真实世界问题背景中,还可以使用哪些效率指标?

个人觉得,其实算法是必要的,但是如果一味地追求算法也是不可取的,所以,这里我想提的是,当一个模块的效率高于其他模块甚至使得其他模块不能够与之协调工作的话,那么这个算法也算是无效的,所以说和其他模块的配合程度非常有关系,如果只是软件中的一个模块速度快,而其他的却不快那么也无济于事,在真是时间问题背景中,出了速度还有模块之间的耦合度和内聚度,以及模块的易用性和健壮性设计的接口是否合理以及可扩展性等等因素。

 

1.1-3选择你原来见过的某个数据结构,讨论一下其长处和局限性

拿线性表来说:如果是用数组实现的线性表,那么其长处在于随机存取元素,而缺点在于插入元素较慢,如果是单链表,那么长处在于插入元素方便,而无法随机存取元素。

 

1.1-4上文中给出的最短路径问题和旅行商人问题有哪些相似之处?有哪些不同之处?

相似之处:这两个问题其实都是求解最短的路程

不同之处:最短路径问题其实是给定了情景并且并不需要遍历所有的点,而旅行商人问题则需要遍历所有的点并求得最短的路程,问题的复杂度不一样。你可以找到一个最短的路径,但是你无法找到一个选择一条送货车行驶距离最短的送货顺序。这其实是一个NP完全性问题。

 

1.1-5举出一个现实世界的问题例子,它只能用最佳解决方案来解决。再举出一个例子,其中近似最优解决也足以解决问题

最佳解决方案:也就是说存在的最佳的解决方案,当然这列例子比较多:比如找出最短的距离的路径。

近似最优解:比如解一元二次方程的时候使用逼近法来获得在范围之内的解。

1.2-1给出一个实际应用的例子,它在应用这一层次上要求有算法性的内容,讨论其中所涉及算法的功能。

这里给出一个实际中的例子:比如亚马逊中如何根据用户所浏览的书籍,然后向用户推荐相关的书籍这里需要一个算法来支撑,涉及数据挖掘技术。

 

1.2-2假设我们要比较在同一台计算机上插入排序和合并排序的实现。对于规模为n的输入,插入排序要有耐性8n^2步而合并排序要运行64nlogn步。当n取怎样的值时,插入排序的性能要优于合并排序?

因为问题规模为n,所以令8n^2*n=64nlogn*n

可以发现当n=2^5=32时,左边<右边,

当n=2^6=64时,左边>右边

那么说明n在(32,64)这个区间之内,可以通过计算机计算出相应的结果。这里只给出一个大致估计的区间范围。

 

1.2-3对于一个运行时间为100n^2的算法,要使其在同一台机器上,比一个运行时间为2^n的算法运行时间更快,n的最小取值是多少?

假设条件:同一台机器,即速度相同

那么可以令100n^2=2^n,解出n,这里我解不出来啊,汗,手工真的解不出来-_-

 

思考题

1-1算法运行时间的比较

对于下表中的每一个函数f(n)和时间t,求出可以在时间t内被求解出来的问题的最大规模n。假设解决问题的算法解决该问题需要f(n)微秒。

该题实际上就是令f(n)=t然后求出n即可,可以使用Excel表格来计算,这里不在赘述。

你可能感兴趣的:(算法导论)