![092a4c3c0ed1467abf2f19051ea49884.png](https://i-blog.csdnimg.cn/blog_migrate/29c5c650edcee105becc51a7c4fb3f0a.jpeg)
《算法导论》第一章学习心得:
何谓算法?
算法就可以认为是一种用于求解良说明的计算问题的工具。算法是把输入转换成输出的计算步骤中的一个序列。
一般来说,问题陈述了输入/输出之间的关系,而算法则描述了一种特定的计算过程来实现这种输入/输出之间的关系。
拿排序问题举例:
输入一个序列<a1 a2 a3 a4 a5>
输入一个递增序列<a1' a2' a3' a4' a5'>
满足a1'<=a2'<=a3'<=a4'<=a5'。
如果对每个输入实例都能得到期望的输出那么称该算法是正确的,当然,某些时候当算法的错误率可控时对于我们来说仍然是可用的。
算法能够解决哪些问题?
1)人类的基因工程。识别人类DNA中的10万个基因,包含30亿碱基对,将这些信息储存于数据库并开发相应的工具进行数据分析,使得生物科学家能够有效地利用数据进行实验研究。
2)网站的数据信息管理。借助算法能够帮助寻找用于传输数据的性能优良的路由,如提高我们利用搜索引擎检索信息的速度。
3)电子商务领域的电子支付保密性。公钥密码和数字签名都是以数值算法为基础的。
4)各领域的线性规划问题如石油公司如何设置油井以最大化利润、航空公司如何在满足乘务员调度法规的基础上最大化利润地将乘务员分配到各班机上。
以上是一些概括,具体到实际问题,可以举出以下例子:
1)给出一张交通图上面标记了所有十字路口之间的距离;我们如何确定从一个十字路口到另一个十字路口间的最短距离?简单来说求解过程如下:将交通图建模为一个图,接着寻找途中从一个顶点到另一个顶点的最短路径。
2)给定两个有序的符号序列:X=<x1,x2,x3......xm>和Y=<y1,y2,y3.....yn>,求出X和Y的最长公共子序列。比如若两个序列是DNF链中的基对,那么当它们具有长的公共子序列时我们认为它们是相似的。而选择X和Y的所有可能的子序列会发挥大量的时间,因此要借助一种合适的算法。
3)拓扑排序问题,给定一个依据部件库的机械设计,其中每个部件可能包含其他部件的实例,我们需要列出这些部件使每个部件出现在使用它的部件的前面。
4)给定平面上n个点寻找凸壳的问题。所谓凸壳就是在该平面上包含所有这些点的最小多边形。
什么是数据结构
所谓数据结构就是一种存储和组织数据的方式,旨在便于访问和修改。
练习题
1-1 给出现实生活中需要排序的一个例子或现实生活中需要计算凸壳的一个例子。
排序:输入班级所有学生的考试成绩,输出成绩排名
凸包:求省/城市边界范围,城市规划等
1-2除速度外,在真实环境中还可能使用哪些其他有关效率的量度?
比如 开发时间、计算时间、能耗比等等
1-3 选择一种你以前已知的数据结构并讨论其优势和局限。
![c687f8a575982e449ad9e65ee9d8de08.png](https://i-blog.csdnimg.cn/blog_migrate/944dde1503f75d25e6e5a0de02fb6fe0.jpeg)
有图的关系可以使用左图的矩阵表示。
1-4 前面给出的最短路径与旅行商问题有哪些相似之处和不同?
最短路径是从一个点到另一个点的最短路径,而旅行商问题是求解从一个点出发走过多个不同的路径再回到原点的所有路径总和的最小值