零基础小白自学算法指南——入门(到放弃)

《零基础小白自学算法指南——入门(到放弃)》

本文会一直修改迭代,所以请不时回来查阅最新版。

微博@领读PRO

论坛领读.PRO论坛 (目前专注数据科学,已开放注册)


起点:编程小白,没有或者很少的编程经验,不知道算法,数据结构,时间和空间复杂度,大O表示法等词的意思。

目标:掌握Python基本语法,理解常见的数据结构和常见的算法,知道如何用Python实现常见的数据结构和常见的算法,可以为刷leetcode上面简单和中等难度的算法题目做好准备。

下面是具体的学习计划。

Python基础语法

选择用python刷面试时的算法题目,有几个好处。最重要的一点是python这门语言简明优雅,简单易学,非常适合之前没有编程经验的初学者学习。此外, 用python刷算法题目可以更少的被数据结构所干扰,可以更多的把精力放到算法设计和实践上。

要用Python刷算法题目,首先要掌握python的基础语法。

推荐书籍Python编程:从入门到实践》(只需要看完第一部分全部十一个章节即可)

读完此书,对python的基本语法应该有一些了解了。学习重点放在for和while循环,控制语句,函数编写,并加深对类的理解,这些都是在刷算法题目时最常用到的。

按每天至少两个章节的进度,这十一个章节完全可以在一周之内搞定,但是这本书如果只读一遍,不可避免会错过一些重要的细节,因此建议快速读第二遍,并做适当的笔记。可以给自己十天到两周的时间。

备选书籍Python基础教程》。这本书很有名气,本身也非常不错,但是对初学者而言没有上面提到的《Python编程:从入门到实践》那么友好。本书的好处是,它的作者也是下文要提到的《Python算法教程》的作者,所以如果你已经具备一些Python编程的基础,且后面打算重点参考《Python算法教程》,也可以考虑选用这本书。

自我检测

入门:如果你可以把《Python编程:从入门到实践》前十一章所附的练习题目基本都搞定后,就可以进行下一部分了。

放弃:如果在这段期间,你觉得学习Python特别吃力,对解决课后问题没有思路一筹莫展,那么建议你先放一放,思考一下这条路是否真的适合你。

算法入门

推荐书籍1:我的第一本算法书》。作者之一对本书的介绍:「本书以iOS 和Android 平台上的应用程序“算法动画图解”为基础。该应用以动画的形式展示了算法的流程,而本书则采用了大量的图片来分步讲解,尽量保留了原应用易懂的优点。为了配合出版,本书还添加了“什么是算法”“算法的运行时间”“图的基础知识”等应用中没有的章节,相信会让读者对算法的理解更加深刻。」此书没有使用某一种具体的编程语言来实现文中提到的算法和数据结构,但是图文并茂,轻松易读,读完之后可以获得对于算法和数据结构的概念性理解。

推荐书籍2:算法图解》。这本书的英文原作和中译本的口碑都不错。虽有些批评声音,比如有人认为讲的过浅,但这本书本就是给初学者入门的,批评者怕是走错了片场。还有人认为书中的Python代码不够Pythonic,但什么是Pythonic有点类似玄学了,初学者并不需要特别考虑。整体而言,此书可以说是对于新手最友好的用python来讲算法的书籍,很适合入门。第七章是个著名算法,但是刷题中用到的不算多。第十、十一章的内容对刷题的帮助也不大,但是为了阅读的完整,建议读完。

有了上面两本书的基础之后,就可以将算法学习更进一步了。

推荐视频Python数据结构与算法系列课程(B站),此视频的作者是知乎的后端工程师王宁宁老师,B站下面的学习者,包括我本人都认为王老师的视频讲的非常清楚,对理解算法很有帮助。这套视频全长约17小时左右,不过王老师的语速稍慢,我在学习时是双倍速听完的,这样,最多九小时就可以听完一遍。不过考虑到有时候为了更好的理解某个概念,可能需要停下来思考或者重复学习某个小节,真正的学习时间可能要十个小时,如果平均每天学习两个小时,五天左右可以学完这个视频课程。另外,王老师后来在网易云课堂和CSDN上都推出了Python数据结构与算法的付费课程,费用并不贵,只要88元,如果有会员,是可以免费学习的。他还为这套视频制作了一套很棒的讲义电子书。电子书以及视频中讲到的Python code也都可以在王老师的知乎专栏或者github下载到。

推荐书籍3Problem Solving with Algorithms and Data Structures using Python视频虽好,但是体系未必十分完善。为了补充学习,这里推荐的这本书的英文版本是可以在线免费阅读的。此书也是北大地空学院数据结构与算法这门课程的指定教材,并且这门课程的15和16级学生还将此书翻译成了中文版。这本书的口碑也非常好,而且其中也包括了使用Python实现常见的数据结构和算法的内容,可以作为王老师视频的很好补充。为了加深印象,可以参考此书以及王老师制作的电子书和视频,自己试着写一下使用Python实现常见的数据结构和算法,作为练习也作为学习成果的检验。

备选书籍:Python算法教程》。这本书的作者还写了文章开篇提到的那本备选书籍——《Python基础教程》,但是这本书我没有读,感觉对于抱着为刷中等以下难度算法题的打算而学算法的人来说,时间投入和效果产出的性价比不高。但是因为用Python讲算法的书不算多,好书就更少,这里简单提一下。对于初学者而言,建议还是把时间和精力放到学习我文中推荐的视频和书籍上来。

总结和忠告

尽管算法学习是一件很有意思而且很酷的事儿,但是如果你在学习过程中过于吃力,并感受到了较大的情绪困扰,那么请暂时听一下思考这条路到底适不适合你。我们还是做自己擅长或者感兴趣的事儿更容易成功,也更能享受到做事情的乐趣。

本文推荐的书籍和视频尽管已经尽量做到了通俗易懂,但新手难免还是会有一些觉得费解的地方,如果疑惑的地方无关宏旨,可以继续学习,对于不确定性的容忍是成熟学习者的重要标志。有些此刻费解的概念可以先放一放,一来你的大脑的后台运算加工可能会让你慢慢相通,二来你接下来要学习的某个概念会为你带来启发,总之随着学习深入有望很自然的理解这个概念。

本文同步发表于领读.PRO网站。

 

 

点赞