百科问答小站 logo
百科问答小站 font logo



哪本《数据结构与算法》最好? 第1页

  

user avatar   qiongmanong 网友的相关建议: 
      

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

三管齐下,缺一不可!

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

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


先来看有哪些书籍推荐

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

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

我自己非常喜欢的普林斯顿算法红宝书 第四版,这本书是普林斯顿超级大神教授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。该合集页数比较短,但是看完之后,对算法的理解肯定会加深不少。

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

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

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


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

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


再来看网络课程。

算法课程强推四门。

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。
给大家送一个福利,LC慷慨给读者小伙伴们送出15% off (优惠24刀)的年费折扣了。不需要等到一年一度的感恩节,也能享受到不错的折扣。平时有需要的小伙伴,可以使用这个链接:LeetCode Premium 通过链接购买年费会员才能享受折扣。
LC的年费还是有很多好处的,可以按照频率刷题,看公司tag,还能看到不少问题的视频答案(新功能),锁住的题还有官方solutions等等。

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

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

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


2. Educative

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

还有这门算法课:

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


(如果你需要上面这些算法课程,那么你可以使用 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背包,拓扑排序。


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

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

C++:

JavaScript:

Java:

Python:

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

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




  

相关话题

  如何看待关于“数据结构与算法基础”的重要性? 
  求十亿内所有质数的和,怎么做最快? 
  计科和软工的区别?报哪个专业好些? 
  彩色图片是通过何种算法变成黑白图片? 
  为什么得不到「自由意志」会让那么多人难以接受? 
  2021年双十一,你有什么值得推荐的囤书书单? 
  「数据结构」的主要内容有哪些,难度如何,怎样系统地学习? 
  你们读过的最好的关于投资的书籍是哪本? 
  有哪些催人泪下的文言文作品? 
  有没有必要把机器学习算法自己实现一遍? 

前一个讨论
大学生戴昂贵的表好吗?
下一个讨论
如何看待唐家三少的自传体爱情小说《为了你,我愿意热爱整个世界》?





© 2024-05-17 - tinynew.org. All Rights Reserved.
© 2024-05-17 - tinynew.org. 保留所有权利