宝贝介绍
你将获得
- 20 个经典数据结构与算法;
- 100 个真实项目场景案例;
- 文科生都能懂的算法手绘图解;
- 轻松搞定 BAT 的面试通关秘籍。
讲师介绍
王争,前 Google 工程师,从事 Google 翻译相关系统的开发,深入研究算法十余年。现任某金融公司核心系统资深系统架构师,负责公司核心业务的架构设计和开发。
他将采用最适合工程师的学习方式,不拘泥于某一特定编程语言,从实际开发场景出发,由浅入深教你学习数据结构与算法的方法,帮你搞懂基本概念和核心理论,深入理解算法精髓,帮你提升使用数据结构和算法思维解决问题的能力。
课程介绍
踏上了编程之路,也就意味着你选择了一种终身学习的生活方式。每一个程序员都要练就十八般武艺,而掌握数据结构与算法就像修炼了九阳神功。换句话说,掌握了数据结构与算法,你的内功修炼速度就会有质的飞跃。
无论你是从事业务开发,想要评估代码性能和资源消耗;还是从事架构设计,想要优化设计模式;或者想要快速玩转热门技术,比如人工智能、区块链,都要先搞定数据结构与算法。因为,任凭新技术如何变化,只要掌握了这些计算机科学的核心「招式」,你就可以见招拆招,始终立于「不败之地」。
那怎样才能真正掌握数据结构与算法呢?是把常用的数据结构与算法背得滚瓜烂熟吗?即便如此,面对现实世界的千变万化,你也不太可能照搬某个算法解决即将遇到的下一个问题。因此,就像学习设计模式、架构模式一样,学习数据结构与算法的关键,在于掌握其中的思想和精髓,学会解决实际问题的方法。
专栏分为 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 季回归 | 这一次,我们一起拿下设计模式!
结课测试|这些数据结构与算法,你真的掌握了吗?
打卡召集令 (5 讲)
打卡召集令 | 60 天攻克数据结构与算法
打卡召集令 | 第一阶段知识总结
打卡召集令 | 第二阶段知识总结
打卡召集令 | 第三阶段知识总结
打卡召集令 | 第四阶段知识总结
注册向导
当你收到授权后,可以通过以下步骤兑换课程:
网页版兑换过程请按照以下步骤操作:
一、通过下方链接地址访问官方兑换网站:
https://time.geekbang.org/service/exchange
二、进入官网后,点击网页右上角的「登陆」按钮:
-
三、在转跳的网页中,任选一种登陆方式登陆账号,
-
四、在转跳的网页中,输入「兑换码 > 验证码」点击「立即验证」即可解锁全部课程。
-
手机版兑换过程请按照以下步骤操作:
一、打开「极客时间」官方 App,依次点击菜单栏「我的 > 点击登陆 > 登陆账号」按钮:
-
二、登陆后返回首页,依次点击「我的 > 兑换中心 > 立即兑换」按钮:
-
三、在弹出的窗口中,输入「兑换码」点击「立即验证」即可解锁全部课程。
-
常见问题
如果你在使用过程中遇到问题,可访问以下链接,前往我们的官方网站查看常见问题的解决方案。