小夕都快要成XX入门指导专业户了QAQ,小夕是要写人工智能和计算机干货的啊喂~好吧,问小夕如何入门算法的小伙伴太多了,还是写一篇文章吧。
小夕还收到了“如何准备托福”和“如何准备考研英语”的求助,然而小夕没有考过,实在帮不上啦(´Д` )
前言
由于小夕不是专业打ACM的,算法功底在目前来看只能说勉强够用,因此小夕只能提供最基本的入门指导啦。完成后,可以找算法大神来帮你提升或者像小夕一样做其他方向的研究。
对于小夕的算法水平,真怕说出来后大把掉粉T_T。以前刷过leetcode,只刷了五六十道。总体来说,easy难度的没什么问题,middle的大部分还是能磨出来的,hard难度的只能说偶尔解决几道了。所以对于已经可以无压力middle的同学,可以关掉本文了。。。
以小夕的研究领域来看,算法当然是必不可缺的。虽然斐波那契堆、摊还分析这些比较高级的数据结构或算法在小夕的领域还没有遇到过,但是像分治、搜索、图算法、动态规划、贪心等算法或算法思想可以说无处不在(当然,第一次在信息检索领域遇到B树时还是很惶恐的)。完成该计划后应该是本科生的算法水平的(当然,肯定比国内大部分高校对本科生的要求高,2333)
正式开始之前,小夕再声明一下,算法入门之路有很多,小夕不能保证小夕的这条道路是最优的,但是这条道路确实是小夕亲身走过的,并且已经把小夕在途中遇到的坑给跳过了(比如某些渣书)。
首先,在开始之前建议掌握Java的基础语法,只需要面向过程的基础语法就可以。
基础数据结构
书籍
《数据结构与算法分析-C语言描述》Mark Allen Weiss;
或者《数据结构-C++语言版》邓俊辉;
或者《数据结构与算法-java语言版》Adam Drozdek。
书籍说明
本科学校用的是第一本教材,感觉挺不错的。有C语言基础的同学极力建议第一本。
第二本和第三本我没有看过,但是身边看过的同学反映还可以。所以如果实在不会C的话,可以看第二本或者第三本。
C/C++/Java都不会?请回溯到编程语言的学习环节。
学习方法
根据你所选用的书籍,理解并可以熟练复现下述数据结构及基础操作(如添加删除元素、遍历等),并掌握算法复杂度分析的基本方法。
顺序表
链表
树
散列(哈希)
图
最多了解一下遍历就好,复杂操作暂时不需要掌握。
基础算法
书籍
《算法》(第四版)Robert Sedgewick
《算法导论》ThomasH. Cormen等
书籍说明
小夕的体验来看,《算法》比《算法导论》更适合初学者。可以说,掌握了Java和基本的数据结构,就能一路停不下来的将这本书啃完(嗯~小夕就是停不下来的那一只)。这本书的英文版炒鸡可爱,是一个很标准的红色方块!所以大学里某段时间小夕完全沦陷在了这本小红书中。对了,小红书有电子版(官方的),炒鸡精致,可以体验一下。中文版是橙色的。
而《算法》的缺点就是讲的实在太良心了,所以厚厚的一本书并没有像算法导论一样覆盖面那么广。因此对于动态规划、贪心算法等高级算法设计思想,还是要求助《算法导论》。
学习方法
if(像小夕一样喜欢啃书){
首先将《算法》直接啃完(边啃边练)。如果时间不充裕,可以放弃最后一章(字符串)和第三章中的“平衡查找树”。其他章节最好不要省了,都是基础中的基础了。
然后将《算法导论》的第十五章“动态规划”和第十六章“贪心算法”啃完,并代码实现一些经典问题如LCS(最长公共子序列)。
}
else {
小夕推荐一下coursera平台上斯坦福大学开设的《算法》课程,如下图
(诶?小夕当时学的时候是叫“算法设计与分析”,现在变成算法专项了。不过看了一下目录,内容应该变化不大)
可以跟着这门课的教学计划来,手头的《算法》和《算法导论》作为参考书足够了。时间不够的话可以只完成该课程的前三个阶段。
不过这门课的老师书写很潦草(不知道现在有没有长进),语速也蛮快的,英语不好的同学还是要以书籍为主。但是这个课程的课后习题和编程题非常良心,认真做出来后收获会很大的。
}
/*
*/