期待效果
- 达到职业顶尖级别 - 对于高级算法数据结构理解
- 一线互联网公司面试
- leetcode 300+的积累
精通一个领域
Chunk it up(切碎知识点)
- 庖丁解牛
- 脉络连接
解释
把算法与数据结构这样比较大,比较繁复的知识体系,切成一块块相对明确,但是脉络化的知识脑图。且必须是脉络相连的
**
为什么是脉络相连的
来自于马斯克回答网友的问题:你在这么多领域可以做这么好,到底是为什么?
原文: One bit of advice:it is important to view knowledge as sort of a semantic tree — make sure you understand the fundamental principles, ie the trunk and big branches, before you get into the leaves/details or there is nothing for them to hang on to.—-Elon Musk
理解翻译: 马斯克觉得任何知识体系都是一棵树,它叫做“语法树”。你要掌握这个领域的知识的话,要把这些知识变成一个树状结构。有最基本的根,然后分出主干,再分出枝叶。每个知识点要和你最熟悉的知识挂靠在一起。成为一颗树形结构。人脑不适合理解和记忆孤立的知识,所以一定要弄成一个脑图。
类比游戏
以游戏为例,可以分出以下几个脉络:
- 控兵(微操)
- 运营
- 战术
- 热键操作 vs 鼠标操作
- ……
如果想达到职业水平,必须要挑其中一个部分/方向出来练习。经过不断的反复和刻意练习后,可以达到顶尖水平。
拆分数据结构体系
一维
- 基础:数组array(string),链表 linked list
- 高级:栈stack,队列queue,双端队列deque,集合set,映射map(hash or map)……
二维**
- 基础:树tree,图graph
- 高级:二叉搜索树 binary search tree(红黑树,AVL树),堆heap,并差集(disjoint set),字典树(Trie)
二维数据结构都是由一维泛化而来的。当一个一维的链表,分叉为两个的时候,他就是二维。例如树
高级在基础上加了很多的特殊判断和分支条件。
特殊
- All:位运算(bitwise),布隆过滤器(BloomFilter),LRU Cache
拆分算法体系
- Branch:if/else 分支选择
- Lteration:for/while/loop 迭代
- 递归 Recorsion
- 搜索 Search:深度优先搜索(Depth First Search),Breadth First Search(广度优先搜索),A*(启发式搜索)
- 动态规划 Dynamic Programing
- 二分查找 Binary Search
- 贪心 Greedy
算法脑图
Deliberate Practicing 刻意练习
- 职业化训练:基本功是区别职业选手与业余选手的根本。
- 基础动作的分解训练和反复练习。最大误区就是只做一遍,只做一遍无法熟练和掌握
- 过遍数:五遍刷题法(五毒神掌)
- 练习缺点和弱项,觉得枯燥和难是在自我突破。专项练习
Feedback 反馈
- 及时反馈
- 主动式反馈(自己查找)
- 看别人的代码
- 学习别人的最佳实践
- 被动式反馈(高手给你审代码)
- Code Review
