Page1-Page66
2020-09-17
引言
Page1-Page2
第二章对n个数进行排序,介绍了排序算法以及分治
第三章使用了准确定义来评价算法的好坏——时间复杂度
第四章介绍了递归式主方法——数学证明
第五章介绍了随机化,为了保证算法的平均性能——例如随机化快排
第一章 算法在计算中的作用
Page3-Page6
1.1 算法
算法的定义:算法就是一系列的计算步骤,用来将输入数据转换成输出的结果(例如排序问题)
算法的表示:可以使用各种形式表示算法,只要精准描述了计算过程,在书中使用伪代码形式,在我自己的练习中使用Golang形式复现算法
算法的正确性:算法的错误率得到控制的话,有时候也是有用的
练习:
1.1-1 给出一个真实世界的例子,其中包含着下列某种计算问题:排序,确定多矩阵相乘的最佳顺序,或者找出凸壳
对一个班级的分数进行降序排序,确定名次
1.1-2 除了运行速度以外,在真实世界问题背景中,还可以使用哪些效率指标?
运行时间
1.1-3 选择你原来见过的某种数据结构,讨论一下其长处和局限性
顺序表,长处:按照索引顺序读取数据;局限性:需要开辟一块完整的内存空间
1.1-4 上文中给出的最短路径问题和旅行商人问题有哪些相似之处?有哪些不同之处?
相同之处:最短路径问题和旅行商人问题都是寻找最短路径
不同之处:一个是两点之间最短路径,一个是遍历所有点且回到原点的最短路径
1.1-5 举出一个现实世界的问题例子,它只能用最佳解决方案来解决。再举出另一个例子,在其中“近似”最优解决也足以解决问题
最佳方案解决:字典索引的排序按照首字母的顺序进行排序
近似方案解决:地铁站选址、电梯调度
1.2 作为一种技术的算法
算法的必要性:资源是有限的,无论是计算资源还是存储资源,分别对应时间和空间上的效率
算法的效率:解决同一问题的不同算法效率相差很大,这种差距往往会远大于硬件上的差距,当输入规模n趋近于无穷大时,时间复杂度小的算法优势就体现出来(在输入规模不大时,算法时间复杂度可能相反)
算法的重要性:对于其他更现代的计算机技术来说,算法依然重要,比如规划路线导航等都需要依赖算法
算法掌握的重要性:是否拥有扎实的算法知识和技术基础,是区分真正熟练程序员的一项重要特征
练习:
1.2-1 给出一个实际应用的例子,它在应用这一层次上要求有算法性的内容。讨论其中所涉及算法的功能
分数降序排序,冒泡
1.2-2 假设我们要比较在同一台计算机上插入排序和合并排序的实现。对于规模为n的输入,插入排序要运行8(n^2)步,而合并排序要运行64nlgn步。当n取怎样的值时,插入排序的性能要优于合并排序?
n^2 < 8nlgn
n大于2
1.2-3 对于一个运行时间为100(n^2)的算法,要使其在同一台机器上,比一个运行时间为2^n的算法运行的更快,n的最小取值是多少?*
100*(n^2) < 2^n
n最小为15
思考题:
1-1 算法运行时间的比较
略