最近粗读了一本算法基础书,看有好多人推荐就学习学习,感觉书写的还是不错的,不敢说学到了多少新算法,至少拓展了视野,系统了知识,本书中确实有不少以前没见过没听过的算法,这些算法不一定会直接用于实际实践中,但是对思路的拓展肯定有不小帮助,而且最好的地方时,正如书中所说,写的确实很浅显易懂。
粗读了一遍,课后题也没有认真完成(实在耐不下性子),但感觉还是有必要先总结一下,以备日后再回头看。
有两种思想,像珠宝商放在天鹅绒上的宝石一样熠熠生辉,一个是微积分,另一个就是算法。微积分以及在微积分基础上建立起来的数学分析体系造就了现代科学,而算法则造就现代世界。——David Berlinski
本书的目的是:使读者了解计算领域中不同的问题的一系列标准算法;此外,还要具备设计新算法和分析其效率的能力。
学习算法的第一步,也是最重要的是要理解问题,否则你极有可能要返工。
一、算法求解基本步骤:
1.理解问题:最基础也是重要的一步,决定着算法的成败
2.了解计算设备的性能:根据不同计算设备的性能往往需要不同的算法策略(顺序算法、并行算法)
3.在精确解法和近似解间做选择:对于一些无法在目前或者在时间限制内找到精确解法的问题,我们就必须在两者之间做出选择
4.确定适当的数据结构:我们都知道程序=算法+数据结构
5.选择恰当的算法:即根据问题和数据结构本身选择恰当的算法,可以是成熟的,也可以是自己开创的
6.详细的表述算法:伪代码是一个不错的选择
7.证明算法的正确性:不光是算法本身的正确性,还必须有“有限时间内”这个条件限制
8.分析算法:时间效率、空间效率角度去研究和分析改进算法
9.实现算法并调试
二、重要的问题类型
排序;查找;串处理;图问题;组合问题;几何问题;数值问题;
三、基本数据结构
线性数据结构(数组和链表);图;树;集合与字典;
四、算法效率分析
1.常用符号
● O(读作“哦”):表示算法增长次数小于等于其参数函数的增长次数
● Θ(读作“theta”):表示等于
● Ω(读作“omega”):表示大于等于