首页 > 搜索 > 数据结构与算法能干什么,哪本《数据结构与算法》最好?

数据结构与算法能干什么,哪本《数据结构与算法》最好?

互联网 2020-10-26 06:43:30
在线算命,八字测算命理

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

三管齐下,缺一不可!

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

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

先来看有哪些书籍推荐

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

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

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

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

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

有时间的小伙伴,他的这篇博客很值得一读:http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html。 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

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

最后一本算法书,名字就叫算法(Algorithms),作者还提供免费的教程,我个人觉得对面试帮助很大。因为里面讲解算法的思路,有点以题目为导向的感觉,其中递归和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。

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

再来看网络课程。

算法课程强推四门。

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

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

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

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

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

https://algs4.cs.princeton.edu/lectures/

https://www.youtube.com/watch?v=1QZDe28peZk&list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX

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

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

https://www.bilibili.com/video/av21620553?p=1

最后来说说练习平台

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

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

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

LeetCode。

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

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

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

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

2. Educative

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

他家最最出名的还是这门Grokking the System Design Interview, 但凡提到准备系统设计,这门课都上入门必推的:

Grokking the System Design Interview​www.educative.io图标

还有这门算法课:

Grokking the Coding Interview: Patterns for Coding Questions​www.educative.io图标

这门课程是一个算法总结提高的课程,它把算法面试中可能遇到的题分成了各种模式,每类题各个击破。

(如果你需要上面这些算法课程,那么你可以使用 awesome-developer 的折扣码获得网站所有课程的额外15%off!上面的折扣码针对单独购买所有课程有效。

如果想买订阅Subscriptions)的小伙伴,则可以用 0820-ZH93025 (必须一模一样输入)的coupon code来获取额外八折的优惠 按年和按月均适用,折扣码十月四号过期,有需要的小伙伴抓紧)。

过了十月四号就只能用 ZHIHUEDU-10 的九折优惠了,大家有需要的抓紧,还有不到两周!

比如有最经典的sliding window模式,Two pointers模式,快慢指针模式,合并intervals模式,cyclic sort模式,in-place翻转链表模式,树上的BFS,树上的DFS,双Heaps模式,subsets模式,二分法变种,Top K模式,多路模式(K-ways),0/1背包,拓扑排序。

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

LeetCode按照怎样的顺序来刷题比较好?​www.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题。是一个入门的很棒的教程。选择其他语言的话,内容应该也是差不多的。

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多