算法学习的瓶颈
1、数据结构和算法学习的疑惑
很多人感觉,学习数据结构和算法并没有多少用,在实际工作中用的机会很少,只是在面试中被考到而已。我并不想纠正这种想法,因为我觉得它是合理的。如果你仅仅学习大学的教材《数据结构》,犹如你只学习了几个单词,你想完成一篇作文,那自然是不可行的。你需要补充其他的资料,把对“算法”这个事物的认识扩大起来,这个时候你会发现算法其实用处很大。
仅仅学习了大学教材《数据结构》,那不叫算法,自然你就会感觉算法其实没有多少实际应用。我觉得,算法的学习分为两个阶段:起步阶段和瓶颈阶段。
起步阶段,就是大家学习《数据结构》的阶段,掌握了几种数据结构,记住了几种算法复杂度。
瓶颈阶段,就是学完《数据结构》之后,没有再深入学习,对“算法”的认识是片面的,开始感叹算法无用。
2、如何解决算法学习的瓶颈
推荐一本不错的书:《趣学算法》
3、《趣学算法》这本书的特点
(1)算法作为一门学问,有两条几乎平行的线索:一个是数据结构,二是算法策略。《趣学算法》将两条线索交织在一起。
(2)大多的书注重内容的收录,但却忽视思维过程的展示。《趣学算法》通俗易懂,从故事引出算法,给读者以启发。
4、《趣学算法》内容节选
很多人感叹:算法为什么这么难!一个原因是:算法本身具有一定的复杂性,还有一个原因:讲得不到位!
算法的教与学有两个困难:
(1)我们学习了那些经典的算法,在惊叹它们奇妙的同时,难免疑虑重重:这些算法是怎么被想到的,这可能是最费解的地方。高手讲,学算法要学它的来龙去脉,包括种种证明。但这对菜鸟来说,这简直比登天还难,很可能花费很多时间也无法搞清楚。对大多数人来说,这条路是行不通的,那怎么办呢?下功夫去记忆书上的算法,记住这些算法的效率,这样做看似学会了,其实两手空空,遇到一个新问题,仍然无从下手。无论做研究还是实际工作,一个计算机专业人士最重要的能力就是解决问题,解决那些不断从实际应用中冒出来的新问题。
(2)算法作为一门学问,有两条几乎平行的线索。一个是数据结构 (数据对象):数组、矩阵、集合、串、排列、图、表达式、分布等。另一个是算法策略:贪心、分治、动态规划、线性规划、搜索等。这两条线索是相互独立的:同一个数据对象上有不同的问题(如单源最短路径和多源最短路径),就可以用到不同的算法策略(例如贪婪和动态规划);而完全不同的数据对象上的问题(如排序和整数乘法),也许就会用到相同的算法策略(如分治)。两条线索交织在一起,该如何表述,我们早已习惯在一章中完全讲排序,而在另一章中完全讲图论算法。还没有哪一本算法书很好地解决这两个困难,传统的算法书大多注重内容的收录,但却忽视思维过程的展示,因此我们学习了经典的算法,却费解于算法设计的过程。
《趣谈算法》这本书从问题出发,根据实际问题分析、设计合适的算法策略,然后在数据结构上操作实现,巧妙地将数据结构和算法策略拧成了一条线。通过大量实例,充分展现算法设计的思维过程,让读者充分体会求解问题的思路,如何分析,使用什么算法策略,采用什么数据结构,算法的复杂性如何,是否有优化的可能,一本好书应该是让读者怀着颗好奇心去思考问题、解决问题。更重要的是体会算法的乐趣,发现算法的美。