如何学习算法
此类问题网上很多,看了一些,总是觉得不太适合自己。现在我想将自己的情况简单介绍一下,希望各位大侠提供一些建议,供我参考。
本人软件学院研一学生,本科时也是软件学院的。这里特别强调是软件学院,不是计算机学院,因为软件学院和计算机学院的培养方案不一样,计算机学院强调计算机科学方面的培养,而软件学院着重工程实践的训练。这两种培养模式最大的区别,(个人觉得)就是对算法的重视程度。计算机学院十分重视算法,并且算法学习氛围也很浓厚,每年ACM比赛都会吸引很多人。而软件学院不太重视算法的学习,本科阶段只开设数据结构课程,没有开设任何算法相关必修或选修课程。我觉得这是一种遗憾,我知道算法的重要性,并且也在平时有空的时候自学一点点(比如看《算法导论》),但是发现效果不太冥明显。
我学习算法的目的有两点:1)兴趣,算法比较有意思,比起做那些无聊的项目有意思多了;2)工作需要,我将来第一份工作很定是从事软件开发,了解常见算法和数据结构是必须的。我一直没有参加我们学校的ACM队,因为个人认为功利性太重,并且训练方式还是像高中一样的题海战术,我不太喜欢这种学习模式,这种类似于高中的学习方式,我不是太喜欢。可能我对我们学校ACM队理解得比较片面。不过参加ACM也有好处,可以认识很多大牛。
据我在网上了解到,学习算法需要一些数学知识做为铺垫,如数论,组合数学,图论等等。这里提到的每一个都可以写一本很厚很厚的书。我没有必要将这些东西研究的十分透彻,那是数学家的事情。我只需要了解里面的一些十分常见的概念、定理就可以了,以方便算法学习时知道是什么。
所以,希望大家介绍几本好书(如《算法导论》),交流一下大家学习算法的经验。我不求在短时间内突飞猛进,只求有一种好的方法长期积累。