大家好:
欢迎大家购买学习我的《算法与数据结构》课程。承蒙大家厚爱,这个课程受到了很多同学的欢迎,也有越来越多的同学加入到了这个课程的学习中来。欢迎大家:)
在和越来越多的同学的交流过程中,我意识到了选择学习这门课程的同学水平差异很大。有刚刚接触计算机的高中生,也有已经在职场的老鸟。对于任何一门课程来说,不管这门课程讲解的是什么知识,针对不同水平不同背景的同学,其讲解方式应该是不一样的。这也是为什么市面上针对同一个领域,会有很多不同的教材的原因——它们面向的用户群体是不同的。因此,我认为有必要在这里重申一下我在准备这门课程的过程中,所设想的目标群体。同时对一些算法和数据结构0基础的同学提供一些学习建议。
这门课程在设计时,是针对已经学习过本科的算法和数据结构课程的同学设计的。但是一般大学课堂的算法与数据结构课程过于着重理论,不重视实践,导致很多同学只是”知道“一些经典的算法和数据结构,却没有亲自动手编写过这些算法和数据结构,对这些算法和数据结构内部运行的机理其实理解的不够深刻,更不用提自己动手一步一步优化这些算法和数据结构了。这门课程将带领大家从最基础的算法和数据结构入手,不仅仅是简单地实现他们,更会带领大家一步一步优化这些算法,通过实际的测试,让大家直观地看到我们的优化所带来的性能提升,真正实际体会到书本上枯燥的复杂度符号背后的意义。
也正是因为如此,这门课程并不适合0基础的同学。因为这门课程没有对一些基础概念进行必要的说明。比如对于归并排序的讲解,这门课程不会深入讲解递归的概念,而是默认大家已经理解了递归,然后直接实现了一个最基础的归并排序,之后开始了我们的优化之旅。所以,0基础的同学很有可能听这个课程有些吃力。
为此,对于0基础的同学,我的建议是:如果是计算机专业的同学,可以配合学校的算法与数据结构课程同步学习,把这个课程中的内容作为学校内容的一个延伸;如果是非计算机专业的同学,可以购买”算法与数据结构“的相关入门教材(通常计算机专业的学习教材就可以。入门阶段不要迷信国外经典教材。入门尤其不要看《算法导论》!),将这个课程的内容,作为自己看书学习相关章节的一个延伸,进行实际的编程演练。
另外,很多非0基础的同学,可能平时不常用C++,为了学习这个课程,开始重新看C++语言。我个人认为大可不必。当然,如果是励志想学好C++的同学,去啃一本C++语言的教材无可厚非;但如果只是为了学习这个课程,完全没有必要。对此,请参考我的另外一个帖子《请大家抓大放小,不要纠结于C++的语法细节》
另一方面,现在这门课程的每一个章节,都已经配备了完整的Java代码,大家可以直接通过这门课程的官方github获得:https://github.com/liuyubobobo/Play-with-Algorithms
最后,请允许我做一个广告。这门课程强调的是经典的算法和数据结构的实现。我的另外一门课程《玩儿转算法面试》(http://coding.imooc.com/class/evaluation/82.html#Anchor),则以leetcode题库为基础,着重介绍了经典的算法思想的使用,更加侧重算法设计方面的实践。对于准备参加算法面试的同学来说,个人认为大致刷一遍leetcode中的经典问题还是很有意义的。而《玩儿转算法面试》课程,则分门别类地介绍了leetcode题库中大多数主流问题和相应的思考路径,相信是一个不错的起点。和这门课程配套学习,相信大家能够对算法与数据结构这部分知识掌握的更牢固:)
对于算法零基础的同学,系统深入地学习算法和数据结构,我推荐我的体系课程。其中的介绍更加的具体。比如对于递归机制的介绍,会使用很多例子,我来手动跟踪,展示给大家看这个递归的运行过程。如果有兴趣可以参考:https://class.imooc.com/sale/datastructure
最后,祝大家offer多多!学有所成!大家加油!:)