极客时间已完结课程限时免费阅读

不定期福利第一期 | 数据结构与算法学习书单

不定期福利第一期 | 数据结构与算法学习书单-极客时间

不定期福利第一期 | 数据结构与算法学习书单

讲述:冯永吉

时长09:03大小8.29M

你好,我是王争。欢迎来到不定期更新的周末福利时间。
专栏已经上线两周了,看到这么多人在留言区写下自己的疑惑或者观点,我特别开心。在留言里,很多同学让我推荐一些学习数据结构与算法的书籍。因此我特意跟编辑商量了,给你一个周末福利。所以这一期呢,我们就来聊一聊数据结构和算法学习过程中有哪些必读书籍。
有的同学还在读大学,代码还没写过几行;有的同学已经工作数十年,这之间的差别还是挺大的。而不同基础的人,适宜看的书是完全不一样的。因此,针对不同层次、不同语言的同学,我分别推荐了不同的书。希望每个同学,都能找到适合自己的学习资料,都能在现有水平上有所提高。

针对入门的趣味书

入门的同学,我建议你不要过度追求上去就看经典书。像《算法导论》《算法》这些书,虽然比较经典、比较权威,但是非常厚。初学就去啃这些书肯定会很费劲。而一旦啃不下来,挫败感就会很强。所以,入门的同学,我建议你找一些比较容易看的书来看,比如《大话数据结构》和《算法图解》。不要太在意书写得深浅,重要的是能不能坚持看完。
大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。而且每个数据结构和算法,作者都结合生活中的例子进行了讲解,能让你有非常直观的感受。虽然这本书有 400 多页,但是花两天时间读完,应该是没问题的。如果你之前完全不懂数据结构和算法,可以先从这本书看起。
算法图解》 跟《大话数据结构》走的是同样的路线,就像这本书副标题写的那样,“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂。它只有不到 200 页,所以内容比较少。作为入门,看看这本书,能让你对数据结构和算法有个大概的认识。
这些入门书共同的问题是,缺少细节,不够系统,也不够严谨。所以,如果你想要系统地学数据结构和算法,看这两本书肯定是不够的。

针对特定编程语言的教科书

讲数据结构和算法,肯定会跟代码实现挂钩。所以,很多人就很关心,某某书籍是用什么语言实现的,是不是自己熟悉的语言。市面大部分数据结构和算法书籍都是用 C、C++、Java 语言实现的,还有些是用伪代码。而使用 Python、Go、PHP、JavaScript、Objective-C 这些编程语言实现的就更少了。
我这里推荐《数据结构和算法分析》。国内外很多大学都拿这本书当作教材。这本书非常系统、全面、严谨,而且又不是特别难,适合对数据结构和算法有些了解,并且掌握了至少一门编程语言的同学。而且,这个作者也很用心。他用了三种语言,写了三个版本,分别是:《数据结构与算法分析 :C 语言描述》《数据结构与算法分析:C++ 描述》《数据结构与算法分析:Java 语言描述》。
如果你熟悉的是 Python 或者 JavaScript,可以参考《数据结构与算法 JavaScript 描述》《数据结构与算法:Python 语言描述》 。至于其他语言的算法书籍,确实比较少。如果你有推荐,可以在留言区补充一下。

面试必刷的宝典

算法对面试很重要,很多人也很关心。我这里推荐几本有益于面试的书籍,分别是:《剑指 offer》《编程珠玑》《编程之美》。
从《剑指 offer》这本书的名字就可以看出,作者的写作目的非常明确,就是为了面试。这本书几乎包含了所有常见的、经典的面试题。如果能搞懂这本书里的内容,应付一般公司的面试应该不成问题。
编程珠玑》这本书的豆瓣评分非常高,有 9 分。这本书最大的特色就是讲了很多针对海量数据的处理技巧。这个可能是其他算法书籍很少涉及的。面试的时候,海量数据处理的问题也是经常会问的,特别是校招面试。不管是开拓眼界,还是应付面试,这本书都很值得一看。
编程之美》这本书有多位作者,其中绝大部分是微软的工程师,所以书的质量很有保证。不过,这里面的算法题目稍微有点难,也不是很系统,这也是我把它归到面试这一部分的原因。如果你有一定基础,也喜欢钻研些算法问题,或者要面试 Google、Facebook 这样的公司,可以拿这本书里的题,先来自测一下。

经典大部头

很多人一提到算法书就会搬出《算法导论》和《算法》。这两本确实非常经典,但是都太厚了,看起来比较费劲,我估计很少有人能坚持全部看下来。如果你想更加深入地学一学数据结构和算法,我还是强烈建议你看看。
我个人觉得,《算法导论》这本书的章节安排不是循序渐进的,里面充斥着各种算法的正确性、复杂度的证明、推导,数学公式比较多,一般人看起来会比较吃力。所以,作为入门书籍,并不是很推荐。
算法》这本书也是一本经典大部头,不过它比起《算法导论》来要友好很多,更容易看懂,更适合初学者入门。但是这本书的缺点也很明显,就是内容不够全面,比如动态规划这么重要的知识点,这本书就没有讲。对于数据结构的东西,它讲的也不多,基本就是偏重讲算法。

殿堂级经典

说到殿堂级经典书,如果《计算机程序设计艺术》称第二,我想没人敢称第一。这本书包括很多卷。说实话,我也只看过比较简单的几卷,比如《基本算法》《排序和查找》。
这套书的深度、广度、系统性、全面性是其他所有数据结构和算法书籍都无法相比的。但是,如果你对算法和数据结构不是特别感兴趣,没有很好的数学、算法、计算机基础,想要把这套书读完、读懂是比较难的。你可以把它当作你算法学习的终极挑战。

闲暇阅读

算法无处不在。我这里再推荐几本适合闲暇时间阅读的书:《算法帝国》《数学之美》《算法之美》。
这些书共同的特点是,都列举了大量的例子,非常通俗易懂。夸张点说,像《算法帝国》,文科生都能读懂。当你看这些书的时候,你常常会深深感受到算法的力量,被算法的优美之处折服。即便不是从事 IT 工作的,看完这几本书也可以开拓眼界。
书籍差不多就是这些。除此之外,留言区很多人问到算法的实现语言。我这里也解释一下。因为我现在比较常用的编程语言是 Java。所以,在专栏里,特别简单的、不涉及高级语法的,我会用 Java 或者 C、C++ 来实现。稍微复杂的,为了让你能看懂,我会用伪代码。所以你完全不用担心语言的问题。
每节课中有需要代码实现的数据结构和算法,我都另外用 Java 语言实现一遍,然后放到 Github 上,供你参考。Github 的地址我放在这里,你可以收藏一下:https://github.com/wangzheng0822/algo
至于其他语言的同学,比如 C、C++、Python、Go、PHP、JavaScript、Objective-C 等,我想了一个 crowd sourcing 的方法。
我希望基础较好的同学,参照我的 Java 实现,用你熟悉的编程语言再实现一遍,并且将代码留言给我。如果你写得正确,我会将你的代码上传到 Github 上,分享给更多人。
还有人问,我学完这个专栏,就可以拿下数据结构和算法吗?我想说的是,每个人的基础、学习能力都不一样,掌握程度取决于你的努力程度。除了你之外,没有人能百分之百保证你能掌握什么知识。
有的同学只是把每一节课听下来、看下来,就束之高阁,也不求甚解,那效果肯定会很差。而有些同学除了听、看之外,遇到不懂的会自己去查资料、看参考书籍,还会把我讲的数据结构和算法都认真地实现一遍,这样的学习效果自然就比只听一遍、看一遍要好很多。即便我已经尽我所能把这些知识讲得深入浅出,通俗易懂,但是学习依然还是要靠你自己啊。
这种答疑的方式也会成为我们之后的固定动作,我会把留言里有价值的问题和反馈沉淀下来,希望对你的日常学习起到补充作用。如果你有什么看不懂、听不懂的地方,或者工作中有遇到算法问题、技术难题,欢迎写在留言区。(我发现留言区里卧虎藏龙啊,没事儿可以多扫扫留言区。)
这次的周末福利时间就到这啦,我们下次见!
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 142

提建议

上一篇
56 | 算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?
下一篇
不定期福利第二期 | 王争:羁绊前行的,不是肆虐的狂风,而是内心的迷茫
unpreview
 写留言

精选留言(136)

  • nkulpj
    2018-09-30
    老师推荐的书80以上都看过,总结一下: 1:《算法第四版》Java语言写的,不过动态规划(没记错的话)没有涉及、很厚!这本书挺推荐的、特别是javaer! 2:《剑指offer》个人觉得题目经典都是老题!但是难度好像很一般啊(还是学生 不太清楚面试内容)、然后里面确实讲了一些很细的东西值得学习!还有本书所有题目作者都提供了C代码和大量的测试案例!nice; 3:编程珠玑:国外作者,这本书我看了不多 但是初步觉得好像是对超大量数据处理的算法! 4:编程之美:微软的书、难度较高、题目很深!这本书里面的题 代码不超过2页的估计作者都不会选上!!!!书不厚 、一般般 5:数据结构和算法分析:我们大学教材!我们老师教的书里都有、代码是伪代码! 6:算法导论:这本书我用来垫电脑!很厚 很无聊0.0!!!
    展开

    作者回复: 👍

    252
  • 极客miao
    2018-09-30
    这个图是编辑妹子辛辛苦苦手绘的,尔等以为一个软件能搞成这样么?
    共 6 条评论
    229
  • 千凡谷梦
    2018-09-30
    老师推荐的书大部分我都了解过,写一写我个人的感受吧。 如果是Java程序员的话,强烈推荐《算法》,书中的代码特别的简洁,水准特别高。书的配套资源也相当不错,B站有教学视频、Github有官方代码、还有专门的测试数据。 至于轻松一些的《大话数据结构》,代码和书的基本源于严蔚敏老师的《数据结构》。代码是C语言,但因为作者没有考虑工程上的抽象,代码的水准并不是特别高,至少,我个人是不太喜欢那种编码方式。 《算法图解》很薄,图的风格我也很喜欢,非常基础,小白入门首选。代码实现是基于Python。 《算法导论》能啃下来,就够了。但是全书伪代码,如果能把公式搞懂、代码自己实现一次,基本上足以秒杀绝大多人了。如果想读懂这本书,必要的级数、概率还是要学一下的。 接下来,垫笔记本电脑的《计算机程序设计艺术》。这套书非常伟大,据说高德纳老爷子刚写了两卷就拿到了图灵奖。时间复杂度理论分析算法也是高德纳老爷子奠定的,大半个算法领域的结论几乎都是高德纳老爷子证明的。如果你真想读这本书,首先我要告诉你,书中代码是古老的MIX汇编,其次,你可能需要更多的数学基础。就如同书中所说,必要的复变函数的基础是必要的。 如果你想提高一下个人的计算机数学功底,为了算法的话,可以读《离散数学及其应用》。当然,如果你想要啃《算法导论》或者近距离膜拜《计算机程序设计艺术》,推荐高德纳老爷子参与编著的《具体数学》。 我自己觉得,掌握《算法导论》一书的90%,就已经是非常、非常优秀的程序员了。殿堂级的书买回来收藏、垫笔记本电脑或者显示屏,实在不行,镇宅辟邪也是极好的,就没必要费力地读了。😂
    展开

    作者回复: 👍

    共 6 条评论
    188
  • 小莫
    2018-09-30
    老师,那个图片是用什么软件做的呀
    59
  • yongxiang
    2018-10-11
    向大家推荐 清华 邓俊辉 《数据结构(c++语言版)(第3版)》,豆瓣评分9.3,这本书是我目前遇到的唯一一本能有兴趣翻开的数据结构的书,可以坚持粗略地翻一遍,其他的书一翻开,密密麻麻的文字和代码,直接想睡觉,而这本书看起来就很舒服,而且是少有的彩色印刷。 非常重要的是,邓俊辉老师还替这本书录制了配套的视频公开课,非常受欢迎,里面有各种形象生动的动画,可以在 edx 或者 学堂在线 上免费观看学习。邓老师的课可以说颠覆了我对数据结构与算法课的认知(想想普通大学上课,拿一本密密麻麻满是文字和代码的书,上课就是老师读课本,黑板上写,真的是疯了)。 我把视频和书本粗略地过了一遍,如果没有这个专栏,我接下去深入学习数据结构与算法,肯定使用这本书和对应的公开课。 不过,由于我水平有限,目前没有深入学习,讲的只是我目前的印象。老师如果有空,也可以点评一下书和公开课,看看适合什么基础的人使用。
    展开
    共 4 条评论
    49
  • LAMBO
    2018-11-04
    买了十几个专栏,看下来,还是觉得王争大神的专栏质量最高。
    45
  • BeautifulSoup
    2018-10-01
    数据结构真的很重要,真的很重要,真的很重要。像我大一的时候,没有人督促,我还能认真的将课本伪代码认认真真用c语言实现一遍,而我自从开始安卓开发,后来到现在一直做后台,其中大多都是轮子,就算能有几个分布式的问题,基本的解决方案也够了。至少目前为止,自己感觉,自己的路好像越走越窄了,从前天去北邮研究生导师给我面试,我当时才发现,我原来是走的远了,走的偏了,数据结构都被我丢了,怪不得我水平越来越低了唉。导致我面试结构也很差,以后一定以数据结构和算法为核心。你可以不会前段,可以不会移动端,可以不会后台,但是你一定要会数据结构!!!!!!
    展开

    作者回复: 👍

    共 3 条评论
    36
  • Nirvanaliu
    2018-09-30
    向大家推荐一本可以配套 严蔚敏老师 《数据结构》学习的代码书。高一凡的《数据结构与算法解析》,西电的高老师,用C 把严的伪代码全部实现,并能运行,非常生猛。

    作者回复: 严老师写的我也觉得不错

    30
  • A_foreign 이호연 w...
    2018-09-30
    程序员代码面试指南 左程云。王老师觉得怎么样
    共 1 条评论
    25
  • 晶晶
    2019-02-12
    谢谢老师的推荐 已购入大话数据结构和算法图解 参加这个课程很机缘巧合 主要目的是为了提升自我给6岁宝贝通过简单有趣的方式灌输一些计算机基础知识 准备把这两本书的内容吃透编成一些小游戏和孩子玩起来
    共 9 条评论
    20
  • 落叶🍂建良
    2018-09-30
    很棒的周末福利,但是在刷了留意之后就慌了,难道没有人打算用javascript实现一遍☺
    共 2 条评论
    21
  • 玉皇大亮
    2018-09-30
    老师推荐的书大部分都了解过,比如算法导论啃到二叉树就啃不动了,啃不动的原因主要是课后题就算自己回答了,也不知道是否正确,我觉得学习是需要反馈的,学习成果需要验证,老师可否提供一些资料可以辅助算法导论这本书的学习呢?谢谢,另祝假期愉快
    20
  • 2018-10-08
    算法导论有视频滴 没记错的话 麻省理工的公开课

    作者回复: 是的 我也看过

    16
  • 耿老的竹林
    2018-09-30
    感谢周末的福利。书籍推荐的确实不少,有空看看工作中实用的,谢谢。另外有个建议,可以剖析一些开源代码,看看其中那些地方有用到算法,比如hash,二叉树,排序查找算法,这些看似简单的算法究竟实际怎么用的,估计印象更深,这也是最近思考项目中,哪些地方用到了算法的一些收获。

    作者回复: 实战部分的5篇基本都是分析开源项目

    16
  • 安静的boy
    2018-09-30
    老师,上篇文章问的问题,你没有回答我,我又看了几遍还是不明白。希望看到给我解答一下。 上篇均摊时间复杂度 insert 那个例子用加权时间复杂度分析。 1 * 1 / ( n + 1 ) + 1 * 1 / ( n + 1 ) + … + 1 * 1 / ( n + 1 ) + n * 1 / ( n + 1 )= O ( 1 )这个公式怎么推出来等于 O ( 1 )的。按照我的理解 n 个 1 / ( n + 1 )相加再与 n / ( n + 1 )相加应该是 2n / ( n + 1 )才对。而这个结果也化不成 O (1) 呀。我真的是百思不得其解。还请老师帮忙解答下,谢谢!
    展开

    作者回复: 不好意思 留言太多 有时候就淹没了 实在抱歉 即便是你说的2n/(n+1) 那分子和分母是相同量级的。如果我们忽略分母的1 就简化为2n除以n。就等于2。复杂度上讲过常量级的都可以表示为O(1)

    14
  • 2018-10-20
    阅后留痕 惭愧 争哥推荐的书,有买但没看,这里留个名目,一个个一步步补上来! 1:入门 《图解算法》、《大话数据结构》、《啊哈算法》 2:面试 《编程之美》、《剑指offer》、《编程珠玑》 3:编程语言 《数据结构与算法分析:Java语言描述》 4:闲暇阅读 《算法帝国》、《数学之美》、《算法之美》 5:经典大部头 《算法导论》、《算法》 6:殿堂级 《计算机程序设计艺术》
    展开
    12
  • 颛顼
    2018-09-30
    作为一个C++后台开发的,目前正在无聊看《C和指针》,《C++沉思录》,《more effective C++》......

    作者回复: 赞

    12
  • 王永旺
    2018-09-30
    c# 的实现竟然没有在列

    作者回复: 哈哈 不好意思 被遗忘的一种语言

    11
  • LucianBen
    2018-09-30
    老师,我想咨询一下。你写的内容,我这边可以根据我的理解然后写一篇文章发布出去吗?可能会有部分的复制...如果这样,需要得到你的授权吗?
    共 1 条评论
    9
  • 玄奘大弟子
    2018-10-06
    哎,惭愧,大学的时候学习数据结构,还挂科了,从那以后到现在工作三年,都没有接触过数据结构,面试和工作中因为这个吃过的亏跟别提了,真的难以启齿。国庆回来,好好的系统的学习一下数据结构,每个帖子认真的多看几遍,自己记记笔记,那怕把帖子抄一遍,也要做到看一篇掌握一篇,也会按照推荐的书籍,一本一本的啃下来。评论区的优秀评论优秀总结,真的很不错,看评论有时候真心能感觉到差距.....
    8