为工程师量身打造的数据结构和算法私教课,课程链接
I. Comments
- source code : https://github.com/wangzheng0822/algo
II. Contents
00. 开篇词 : 从今天起,跨过“数据结构与算法”这道坎
作者的经历 : 本科研究生西安交大,获赠《算法导论》一书,入门深钻,毕业后 Google 工作
01. 为什么要学习数据结构和算法?
避免做 CRUD boy
, 向高手之路迈进。
高手之间的竞争就在细节,
- 用的算法够不够优化?
- 数据存取的效率是不是够高?
- 内存是不是够节省?
02. 如何抓住重点,系统高效地学习数据结构和算法?
数据结构与算法,相辅相成,不可分割。再辅以复杂度分析
贯穿始终,理论实践迭代深化,建立完整的知识体系和编程直觉。
03. 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
Big-O 分析法
04. 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
都要熟稔于心.
周末福利 第一期 数据结构与算法书单
可以说很硬核的福利了.
05. 数组:为什么很多编程语言中的数组都是从 0 开始的
因为C中数组下标代表偏移的位置, 后面的语言就继承喽. 特殊的就是 Matlab 那样从 1 开始的,
06. 链表(上): 如何实现LRU缓存淘汰算法
07. 链表(下): 如何轻松写出正确的链表代码
08. 栈: 如何实现浏览器的前进和后退功能
09. 队列: 队列在线程池等有限资源中的应用
10. 递归: 如何用三行代码找到"最终推荐人"?
分治是一种解决问题的思想, 递归是一种实现这种思想的编程技巧.
11. 排序(上): 为什么插入排序比冒泡排序更受欢迎?
因为完成比较后, BubbleSort 需要 swap, 三步一次; 而 InsertionSort 右 move, 一步一次.
12. 排序(下): 如何用快排思想在 O(n) 内查找第 K 大元素?
二分法每次去掉一半儿, 再剩下的一半儿中找, 综合下来就是 O(n)
13. 线性排序: 如何根据年龄给 100 万用户数据排序?
年龄是有限的整数集合 (0, 1,2,…, 120)足够了. 一个一个放桶里, 计数排序
14. 排序优化: 如何实现一个通用的,高性能的排序算法?
没什么新鲜的, 就是判断不同的条件, 采用最优的策略, 具体下来也就是之前的那些方法的组合. 当然, 作为库函数, 性能一定要发挥到极致.