ITPub博客

首页 > 架构设计 > > 穷码农回答之:哪本《数据结构与算法》最好?

穷码农回答之:哪本《数据结构与算法》最好?

作者:浪花小雨滴 时间:2020-05-20 12:02:17 0 删除 编辑

备份回答:

哪本《数据结构与算法》最好?​图标

既然想要系统地掌握算法和数据结构,那自然是要看书,上课,和练习相结合。

三管齐下,缺一不可!

所以我从三个方面来讲一下。先是书籍推荐,再是网课选择,最后是练习平台。

只有转化成了你代码的算法和数据结构,才是掌握了的算法和数据结构!


先来看有哪些书籍推荐

书挺多,但经典的也就那么几本,而且我建议选定一本之后,看多遍。而不是看好几本书,每一本都走马观花过一下。

首先是算法方面,算法和数据结构是计算机学习的基石。无论你学习计算机的任何方向,没有扎实的算法和数据结构,肯定学习起来就捉襟见肘了。

我自己非常喜欢的普林斯顿算法红宝书 第四版,这本书是普林斯顿超级大神教授Robert Sedgewick的神作,该书还有配套的MOOC课程,以后有时间再写网课了。该书是特别棒的算法和数据结构的教程,全书提供Java的实现,而且大部分内容也放在了本书的配套网站上:algs4.cs.princeton.edu/ 本书的优点是会把算法详细的过程掰开揉碎地讲明白了。书里面有大量的配图,更不说配套网站上的ppt,简直就是艺术。一句话,1万分推荐。就一个缺点,没有讲动态规划(DP),所以我在下面也推荐一些涉及到DP的书籍。你认真读此书的话,会发现很多大公司的面试题就来自它的习题里面。




还有另外一本算法神作就是算法设计手册了。这一本则是把算法分类了,还提供了特别多适用的算法应用场景,让读者知其然,并知其所以然。这本书的数和图部分,还有递归回溯,是特别多人拍手称赞的地方,值得认真看三遍。这本书就讲了第一本里面遗憾缺失的DP。总之,这两本都是超级强推。




前Google大佬,Steve Yegge非常推荐的计算机书籍之一:

有时间的小伙伴,他的这篇博客很值得一读:steve-yegge.blogspot.com。 Google的Interview Guide,很多就出自这篇博客。

提到算法,肯定会提到算法圣经之算法导论,这本书是算法百科全书,优点是全,缺点是太全太厚,数学太多了。是很好的参考书,但不适合短期突击学习。感兴趣的读者可以挑战一下。




接下来的两本,可以当做是算法的课外读物,写得浅显易懂。刚开始学算法的小伙伴,可以先从他们着手,第一本其实是合集,叫Algorithms Illuminated。分三个部分:基础,图算法和数据结构,贪心算法和DP。该合集页数比较短,但是看完之后,对算法的理解肯定会加深不少。

这个系列暂时还没有中文翻译,但Coursera上面有这个算法系列的课程:Learn Data Structures and Algorithms from UCSD/HSE on Coursera

提到Coursera的课程,就多说一句,现在最火的Machine Learning的课程在这里:Andrew Ng' Machine Learning: Master the Fundamentals

接下来就是图解算法了,语言风趣,有比较多的插图。入门很合适。

最后一本算法书,名字就叫算法,作者还提供免费的教程,我个人觉得对面试帮助很大。因为里面讲解算法的思路,有点以题目为导向的感觉,其中递归和DP部分,让我有醍醐灌顶之感。

可以通过下面的链接,直接官方下载PDF:

by Jeff Erickson​jeffe.cs.illinois.edu


第二部分是数据结构,这里就推荐三本书,一本是Java,一本是Python。Java的就是鼎鼎大名的CS61B的课程推荐教程:Data Structures and Algorithms in Java。Python的也是一本畅销书:Problem Solving with Algorithms and Data Structures Using Python。







还有就是中文的《大话数据结构》,数据结构中文入门读物的不二选择。






再来看网络课程。

算法课程强推四门。

Again,选一个好好多学两遍,别都想学,没那么多时间,贪多嚼不烂。

网络课程的话,则是十二分强推UCB的CS61B。他们家的计算机系的CS61A,B,C课,简直制霸各种课程推荐列表。

  1. CS61B的官网在这里:inst.eecs.berkeley.edu/ 这门课以Java为主。

2. MIT的算法课,教程用的算法导论,也是强推的网课:youtube.com/watch? 这门算法则基本不涉及到语言层面,主要是算法层面,讲得很好。

3. 然后就是红宝书的网课以及配套官网:

algs4.cs.princeton.edu/

youtube.com/watch?

4. 斯坦福2018 Winter CS106B: Programming Abstractions,虽然从名字不太能看出来,但其实是用C++讲数据结构,想用C++的小伙伴不容错过,我看了一半了,特别有帮助,尤其是对递归和回溯的讲解,简直醍醐灌顶。

现在因为不可知的原因,Youtube上面已经下架这门课程,但更方便的是,咱们可以在B站直接看:

bilibili.com/video/av21


最后来说说练习平台

光学(看书)不练,算法和数据结构是学不会的。

所以推荐一些好的刷算法和数据结构平台,当然另一方面也是为了找工作面试做准备咯。

如果你在北美的话,初级程序员面试基本就是考察数据结构和算法,所以大家一定要勤加训练!

  1. LeetCode。

这是现在刷题找工作最热门的网站了。

但LeetCode现在题目也太多了,一共1300+了,而且一直在增加!!!

全刷完没必要,也不高效,所以推荐看下面的回答:

大家都是如何刷 LeetCode 的?​图标刷完LeetCode是什么水平,能拿到什么水平的 offer ?​图标

国外LeetCode大牛们是怎么刷LeetCode的:

穷码农:LeetCode到底应该怎么刷?面试应该注意哪些问题?大公司到底怎么进?来看看LC大神们的刷题攻略!​zhuanlan.zhihu.com图标

LeetCode 2019官方精华经验合集在这里:

https://leetcode.com/discuss/general-discussion/459286/Year-in-Review%3A-2019​leetcode.com

2. Educative

Educative: Interactive Courses for Software Developers​www.educative.io图标

他们家还给Github的学生账户提供半年的免费课程,满足条件的小伙伴,可以照着下面的文章流程申请一下,有更详细的课程和相关步骤介绍:

穷码农:网课党的双重大福利!Github学生账号和Educative合作,总共2000美金的课程免费半年啦​zhuanlan.zhihu.com图标

对算法最有帮助的课程是:

穷码农:别再埋头刷LeetCode之:北美算法面试的题目分类,按类型和规律刷题,事半功倍​zhuanlan.zhihu.com图标

上面这门课的理论和题目结合则阅读这一篇:

穷码农:LeetCode按照怎样的顺序来刷题比较好?​zhuanlan.zhihu.com图标

专门针对数据结构的课程有:

C++:

Data Structures in C++: An Interview Refresher​www.educative.io图标

JavaScript:

Data Structures in JavaScript: An Interview Refresher​www.educative.io图标

Java:

Data Structures in Java: An Interview Refresher​www.educative.io图标

Python:

Data Structures in Python: An Interview Refresher​www.educative.io图标


我上过其中的Java版本,课程是把数据结构里面的基础数据结构都用java实现了一遍,对于用java的同学特别有帮助,java的基础在刷题的过程中,还是要必须掌握的。

课程从复杂度开始讲起,Arrays,LinkedLists, Stacks/Queues, Graphs, Trees, Trie, Heaps, Hash Tables等数据结构,全都实现了一遍。而且还有配套的基础LeetCode题。是一个入门的很棒的教程。选择其他语言的话,内容应该也是差不多的。

动态规划的题目,则单独成为一门课了:

穷码农:动态规划及面试,学完这一篇,你就入门了:Dynamic Programming, 动态规划,经典题目​zhuanlan.zhihu.com图标

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3144079/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Compact详述-测试
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40008