关于如何学习算法,正如Teaching Algorithms - Ricardo Baeza-Yates一文中讲解的如何教算法,我们学习者就应该明白,学习算法有两种道路:
1,按照问题类型对算法分类学习。(死板,只能解决一类问题,却不能明白算法的来源)
2,按照算法设计技术进行分类。(明白算法的来由,更符合人类的认知过程)
而我们要采取的,自然是第二种学习方法。采用这种思路的教材,最好的莫过于算法引论(豆瓣) - 豆瓣读书这本书了,但是难度过大,初学者还是推荐算法设计与分析基础(豆瓣) - 豆瓣读书这本书。如果看好了这两本书,再去抠算法导论(原书第3版) (豆瓣) - 豆瓣读书将会游刃有余了。
第一节 何谓算法?
说到定义,我们当然要先看看Wikipedia喽:
In mathematics and computer science, an algorithm is a self-contained sequence of actions to be performed.(在数学和计算机科学中,算法是一系列可执行的独立操作。)
算法
第二节 算法分析
通过分析算法的时间效率和空间效率来判断算法的效率,这从一方面反映了算法的好坏。
学会使用基本的符号O等。
第三节 基本问题
1,排序问题(稳定?基于比较?)
2,查找问题(键值)
3,字符串处理(匹配)
4,图问题(旅行商?)
5,组合问题(最短路径?)
6,几何问题(最近对?凸包问题?)
7,数值问题(数值算法)
第四节 数据结构
1,线型结构(数组,链表,字符串,栈,队列)
2,网型结构(有向图,无向图,完全图,稀疏图,邻接矩阵,邻接链表,连通图)
3,树型结构(森林,二叉树,多叉树,查找树,平衡树)
4,集合与字典(位向量,包,hash)
小结:
抓住算法的核心与设计思想,这样学习才会更牢固。对于学习算法的问题,为什么算法这么难?此贴给了我们很详细的描述。再推荐一个大佬的算法学习之路给大家,以此共勉!
网友评论