期待效果

  • 达到职业顶尖级别 - 对于高级算法数据结构理解
  • 一线互联网公司面试
  • 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

所有复杂的算法,最后都是寻找重复单元
**

算法脑图

数据结构和算法-思维导图.pdf

homework:画一份自己的脑图
**

Deliberate Practicing 刻意练习

  • 职业化训练:基本功是区别职业选手与业余选手的根本。
  • 基础动作的分解训练和反复练习。最大误区就是只做一遍,只做一遍无法熟练和掌握
  • 过遍数:五遍刷题法(五毒神掌)
  • 练习缺点和弱项,觉得枯燥和难是在自我突破。专项练习

Feedback 反馈

  • 及时反馈
  • 主动式反馈(自己查找)
    • 看别人的代码
    • 学习别人的最佳实践
  • 被动式反馈(高手给你审代码)
    • Code Review