数据结构与算法之美
王争
前Google工程师
立即订阅
71638 人已学习
课程目录
已完结 75 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从今天起,跨过“数据结构与算法”这道坎
免费
入门篇 (4讲)
01 | 为什么要学习数据结构和算法?
02 | 如何抓住重点,系统高效地学习数据结构与算法?
03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
基础篇 (38讲)
05 | 数组:为什么很多编程语言中数组都从0开始编号?
06 | 链表(上):如何实现LRU缓存淘汰算法?
07 | 链表(下):如何轻松写出正确的链表代码?
08 | 栈:如何实现浏览器的前进和后退功能?
09 | 队列:队列在线程池等有限资源池中的应用
10 | 递归:如何用三行代码找到“最终推荐人”?
11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?
12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
13 | 线性排序:如何根据年龄给100万用户数据排序?
14 | 排序优化:如何实现一个通用的、高性能的排序函数?
15 | 二分查找(上):如何用最省内存的方式实现快速查找功能?
16 | 二分查找(下):如何快速定位IP对应的省份地址?
17 | 跳表:为什么Redis一定要用跳表来实现有序集合?
18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
19 | 散列表(中):如何打造一个工业级水平的散列表?
20 | 散列表(下):为什么散列表和链表经常会一起使用?
21 | 哈希算法(上):如何防止数据库中的用户信息被脱库?
22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?
23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?
24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?
25 | 红黑树(上):为什么工程中都用红黑树这种二叉树?
26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树
27 | 递归树:如何借助树来求解递归算法的时间复杂度?
28 | 堆和堆排序:为什么说堆排序没有快速排序快?
29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?
30 | 图的表示:如何存储微博、微信等社交网络中的好友关系?
31 | 深度和广度优先搜索:如何找出社交网络中的三度好友关系?
32 | 字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?
33 | 字符串匹配基础(中):如何实现文本编辑器中的查找功能?
34 | 字符串匹配基础(下):如何借助BM算法轻松理解KMP算法?
35 | Trie树:如何实现搜索引擎的搜索关键词提示功能?
36 | AC自动机:如何用多模式串匹配实现敏感词过滤功能?
37 | 贪心算法:如何用贪心算法实现Huffman压缩编码?
38 | 分治算法:谈一谈大规模计算框架MapReduce中的分治思想
39 | 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
40 | 初识动态规划:如何巧妙解决“双十一”购物时的凑单问题?
41 | 动态规划理论:一篇文章带你彻底搞懂最优子结构、无后效性和重复子问题
42 | 动态规划实战:如何实现搜索引擎中的拼写纠错功能?
高级篇 (9讲)
43 | 拓扑排序:如何确定代码源文件的编译依赖关系?
44 | 最短路径:地图软件是如何计算出最优出行路径的?
45 | 位图:如何实现网页爬虫中的URL去重功能?
46 | 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?
47 | 向量空间:如何实现一个简单的音乐推荐系统?
48 | B+树:MySQL数据库索引是如何实现的?
49 | 搜索:如何用A*搜索算法实现游戏中的寻路功能?
50 | 索引:如何在海量数据中快速查找某个数据?
51 | 并行算法:如何利用并行处理提高算法的执行效率?
实战篇 (5讲)
52 | 算法实战(一):剖析Redis常用数据类型对应的数据结构
53 | 算法实战(二):剖析搜索引擎背后的经典数据结构和算法
54 | 算法实战(三):剖析高性能队列Disruptor背后的数据结构和算法
55 | 算法实战(四):剖析微服务接口鉴权限流背后的数据结构和算法
56 | 算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?
加餐:不定期福利 (6讲)
不定期福利第一期 | 数据结构与算法学习书单
不定期福利第二期 | 王争:羁绊前行的,不是肆虐的狂风,而是内心的迷茫
不定期福利第三期 | 测一测你的算法阶段学习成果
不定期福利第四期 | 刘超:我是怎么学习《数据结构与算法之美》的?
总结课 | 在实际开发中,如何权衡选择使用哪种数据结构和算法?
《数据结构与算法之美》学习指导手册
加餐:春节7天练 (7讲)
春节7天练 | Day 1:数组和链表
春节7天练 | Day 2:栈、队列和递归
春节7天练 | Day 3:排序和二分查找
春节7天练 | Day 4:散列表和字符串
春节7天练 | Day 5:二叉树和堆
春节7天练 | Day 6:图
春节7天练 | Day 7:贪心、分治、回溯和动态规划
加餐:用户学习故事 (2讲)
用户故事 | Jerry银银:这一年我的脑海里只有算法
用户故事 | zixuan:站在思维的高处,才有足够的视野和能力欣赏“美”
结束语 (3讲)
结束语 | 送君千里,终须一别
第2季回归 | 这一次,我们一起拿下设计模式!
打卡召集令 | 60 天攻克数据结构与算法
免费
数据结构与算法之美
登录|注册

用户故事 | Jerry银银:这一年我的脑海里只有算法

Jerry银银 2019-02-13
比尔·盖茨曾说过:“如果你自以为是一个很好的程序员,请去读读 Donald E. Knuth 的《计算机程序设计艺术》吧……要是你真把它读下来了,就毫无疑问可以给我递简历了。”虽然比尔·盖茨推荐的是《计算机程序设计艺术》这本书,但是本质却折射出了算法的重要性。
大家好,我是 Jerry 银银,购买过算法专栏的同学应该时不时会看到我的留言!目前我是一名 Android 应用开发工程师,主要从事移动互联网教育软件的研发,坐标上海。

我为何要学算法?

细细想来,从毕业到现在,7 年多的时间,我的脑海里一直没有停止过思考这样一个问题:技术人究竟能够走多远,技术人的路究竟该如何走下去?相信很多技术人应该有同样的感受,因为技术的更新迭代实在是太快了,但是我心里明白:我得为长远做打算,否则,就算换公司、换工作,可能本质也不会有什么改变
但是,我其实不太清楚自己到底应该往什么地方努力。于是,我翻阅了好多书籍,搜寻 IT 领域各种牛人的观点。多方比较之后,我终于决定,从基础开始,从计算机领域最基础、最重要的一门课开始。毫无疑问,这门课就是数据结构和算法。

我是如何遇见极客时间的?

既然找到了方向,那就开始吧。可是问题来了,从哪儿开始呢?大方向虽然有了,可是具体的实现细节还是得慢慢摸索。大学没怎么学,工作这么多年也没有刻意练习,起初我还真不知道从哪儿开始,只是买了本书,慢慢地啃,也找了一些简单的题目开始做。有过自学经历的同学,应该有同感吧?刚开始连单链表翻转这样简单的题都要折腾半天,真心觉得“痛苦”。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《数据结构与算法之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(31)

  • Jerry银银
    今天的文章是我个人新年开工收到的最大红包
    2019-02-13
    261
  • 吴庆
    深有同感。 我也是一个毕业7年的嵌入式初级软件工程师,绕了一大圈才发现基础理论知识是何等重要。

    吴军老师说过:
    基础理论知识是一个人的基线,理论越强基线越高。再为自己定一个目标和向上攀附的阶梯,那么达到目标就是时间问题。
    而很多野路子工程师搞了半辈子也未达到优秀工程师的基线。很多他们绞尽脑汁得出的高深学问,不过是正规工程师看起来很自然的东西。

    关于工程师发展路线,或是成长阶段,吴军老师给出了一个参考(每一级能力相差一个数量级):
    - 第五级: 能独立解决问题完成工程工作
      - 熟练应用工程知识和技能,无需他人指导,根据分配的需求完成任务。
    - 第四级: 能指导和带领其他人一同完成更有影响力的工作
      - 根据大需求确立目标以及实现方式,并将解决方案进行分解,领导团队(分配、协调、沟通等)完成此目标
    - 第三级: 能独立设计和实现产品,并且在市场上获得成功
      - 充分了解行业,提炼需求,并独立领导团队完成产品研发。随后可以将其量产化并营销至市场。
    - 第二级: 能设计和实现别人不能做出的产品,具有不可替代性
      - 对行业有深入认知和独特见解,能够做出先前没有的产品,且别人无法复制。
    - 第一级: 能开创一个产业
      - 站在科技最前沿,充分认识哪些科研成果已经成熟,在当前时代已经被满足,并将其产业化,形成巨大的生态链
    2019-02-13
    2
    30
  • 纯洁的憎恶
    我本硕都是计算机专业,但工作却属于第二次工业革命就已经存在的传统工业领域。这几年,看着同学们在计算机领域一个接一个的实现财务自由,或在极客时间上开课,我深深的感到被时代抛弃了。同时也慢慢发现选择有时候真的比很多自己过去重视的东西更重要,而且没得选很可能也是一种优势。回去是不可能了,以我的年纪与天赋,很难带着数年的劣势去和新一代的工程师竞争。本应置身浪潮之中,却在智能时代掉队,既令人遗憾,也使人恐惧。

    下面的路该怎么走?这是无论多么焦虑都要面对的问题。智能时代是变革的时代,在新生产力的驱动下,一些旧业态将被淘汰,新产业出现,还有一些传统产业被重新塑造、如虎添翼。投身于最新生产力的创造,无遗更机会成为时代的弄潮儿。然而,使新生产力迸发出最惊人创造力的场景,往往是在与传统产业的结合上。第一次工业革命的“蒸汽机+传统产业”,第二次工业革命的“发电机+传统产业”,二战后信息革命的“电子化+传统产业”,本世纪初的“互联网+传统产业”,以及当下的“机器智能+传统产业”,都成为或将成为人类文明加速腾飞的推进器。也许这是我的选择被赋予的新使命,当然它需要千万人的共同努力。新的时代已经来临,无论我们愿不愿意。在这个时代,我们可以做技术的主人,可以做技术的仆人,也可以做“隐身人”,但唯独不能站在技术的对立面。我不能做技术的敌人,也不想做“隐身人”,那么我就要同技术站在一起。

    从哪里开始?单纯的写写Java和Python代码,也许可以建立与智能时代联系,但它难以建立宏观、深刻、系统的时代体感。我认为要从最根本的地方入手,直接切入这个时代的“第一性原理”,也就是机器智能的“第一性原理”。算法与数据结构是机器的思维方式,依旧是智能时代的灵魂,这里应该是我再出发的起点。相应的还有计算机体系结构、计算机网络、操作系统,以及有关的数学知识体系。然而这些知识我在学校都学过,仅仅再回忆一遍就可以吗?不,这远远不够。因为我需要更系统的学习,需要知道这些知识在工业界的最新进展与实践,需要把这些知识连接到更广泛的行业领域中举一反三,需要能够判断哪些任务适合交给机器而哪些还不能,需要引发更多有价值的深入思考……很幸运我遇到了极客时间。

    带着问题学习、用学到的知识解决实际问题,是最高效的学习方法。记得在学校学习算法与数据结构的时候,我实在无法理解这些反直觉的机器逻辑,能够理解的知识点非常有限,更不用说形成完备知识体系了。更可惜的是,那时心浮气躁,没有沉下心由浅入深,却靠疯狂做题刷存在感,以题量衡量学习水平,实则是狗熊掰棒子、只见树木不见森林,更很少能与工业场景建立联系。走出校园后没有优质的学习环境,缺乏有效学习渠道,再想“补课”就难了。极客时间提供了比较优质的环境与渠道,降低了领域间的信息门槛,使我能够接触到一线工程师与技术人员的新视角,与工业界建立一定的联系。在这里计算机知识不是数字游戏与考试题,而是一个个真实的工程问题,有助于引导建立时代体感。

    师傅领进门修行在个人。然而想学好算法与数据结构,乃至于达到个人目标,仅仅啃一遍王争老师的课是远远不够的。这是一个很好的开始,它很重要,但也只是一个开始,后面的路还要靠自己。这个时代没有地图,也没有路标,只有广阔的天地和一块指南针。那么就从更多的接触、更加系统的学习、更加深入的思考,以及第二遍阅读《算法与数据结构之美》开始吧。
    2019-02-13
    2
    28
  • 广洲
    我也是通过Jerry银银的分享购买的专栏,我目前是在自学,刚起步的,学习的很痛苦、很吃力。但相对培训班那两万块的学费,我们这个专栏太值了。感谢王老师,感谢Jerry银银。
    2019-02-13
    10
  • sakura
    看到前辈们的文章感触很多,自己是一个大三安卓开发,学校课基本上不咋听,上学期在百度实习,现在准备阿里面试,但是面试时候全问我的都是操作系统编译原理数据结构比较多,自己觉得老师这门课讲的很好,真的是循序渐进,有时候自己偷懒没看,就堆了一大堆课现在边准备面试继续复习老师的课,很谢谢老师和那些在留言区总结知识的人。
    2019-02-13
    4
  • lianlian
    王争老师早上好啊,我第一个订阅的极客时间专栏就是数据结构与算法之美,看到第一篇中您写着“基础知识就像是一座大楼的地基,它决定了我们技术的高度”,我感到很惊喜,两年多前我也跟人说过“基础不是100分考60分,而是建摩天大楼的地基。”哈哈(ಡωಡ)hiahiahia 我是2018年11月11号晚上吧知道这个专栏,当天信号不好,我等到凌晨一点多购买成功后,迫不及待听了2节课才睡觉。王争老师的专栏太棒了,内容价值远超价格。走路,吃饭,空闲,学而时习之,勤加练习,不亦乐乎!感谢王争老师的分享o(^o^)o
    2019-02-13
    4
  • 我还以为我真太差了,看到你是安卓工程师,我就放心了😂😂
    2019-02-13
    2
    4
  • zixuan
    厉害厉害,非常扎实。另外你的字写得好😄。
    2019-02-13
    3
  • abner
    半年时间过去了,我也是开始掉队的那一批,中后期开始慢慢赶上进度,虽然只是浏览了一遍,之后到现在开始从头仔细看,也结合着必知必会的30道题进行练习,感觉效果还是有的,接下来会投入更多的时间学习专栏,立个小目标:这周把必知必会30题做完,在2月底把专栏至少刷3遍。
    另,老师开设这么好的一个专栏,真的谢谢!
    2019-02-13
    3
  • 融梨
    学习跟年龄无关,最开始跑不一定赢。让我想起《几何原本》的五个公理,在各个领域借鉴它的思想。
    2019-04-09
    2
  • Michael
    这门课程是从去年十一月份买的,当时买了之后就发现非常值,讲的不枯燥,都能听的进去,就拿堆这个数据结构来说,我自己练习了真的至少有十几遍了,而且做LeetCode题目的时候,我自己都避免使用类库,每次自己都是手动实现一个堆自己用。我个人一般每篇文章会看两遍,难一点的例如红黑树,动态规划,回溯,分支会反复的看,做题,体会个中道理,感谢老师的专栏
    2019-02-21
    2
  • aguan(^・ェ・^)
    谢谢老师。谢谢Jerry的分享。
    2019-02-13
    2
  • $Jason
    我也是掉队的那一批,学到20几的时候还是有点吃力,感觉之前学的都忘了,就又回头学,但是还是在排序那边绕的我很晕,学习很受挫。但是我不放弃,接着学。
    2019-02-13
    2
  • 王加武
    我今年刚上大二,学完了JAVA 基础知识,现在转向了数据结构与算法
    2019-09-17
    1
    1
  • Jeff.Smile
    以前大学学习学得糊里糊涂的,工作后看了一些书但都只是掌握些皮毛,从来没有感觉能像这个专栏一样让我感觉那么清晰,老师太棒了,让我建立了自信心。
    2019-07-16
    1
  • 恋恋
    在大学期间断断续续的学习了算法,参加了一些编程竞赛。本科毕业半年,在部门内算法老哥的指导下逐渐体会它在项目中的实际用途和神奇之处。
    《数据结构和算法之美》是我在极客订阅的第一个专栏,我个人觉得看专栏和书的区别是——看书是一个人在看,而专栏里有老师的答疑,用户的相互探讨,集思广益。
    半年时间过得很快,虽然专栏里的文章已经看过大半,但老师列出的课后练习和算法实战还没有完全掌握,专栏里的文章我仍需多次阅读。
    谢谢老师!
    2019-02-13
    1
  • Dale
    笔记做的漂亮呀
    2019-02-13
    1
  • Neptune
    老哥厉害,我也是搞安卓的不过还没有毕业,你这这样的前辈给我树立了一个很好的榜样,感谢分享!
    2019-12-07
  • AL
    看到前面学习者的留言,让我很受鼓舞和启发,向你看齐,让自己加油
    2019-12-05
  • 陈志恒
    哈哈 抓住两个关键字:抽象 拆解
    2019-11-26
收起评论
31
返回
顶部