Lyf凤

靡不有初,鲜克有终

扩大
缩小

第01课 | 数据结构与算法总览

如何有效学习数据结构与算法

线上课程

• 预习 — 基础知识自己预习和查看

• 课堂互动 — 跟着我一起思考、回答问题

• 课后作业 — 按照切题办法

 

期待效果

• 职业顶尖级别 - 对于算法数据结构的理解

• 一线互联网公司面试

• LeetCode 300+ 的积累

 

 

精通一个领域的方法

          

中文版译名: 《异类:不一样的成功启示录》

作者:  马尔科姆·格拉德威尔

Chunk it up 切碎知识点

分解数据结构和算法 :

数据结构

• 一维:
  • 基础:数组 array (string), 链表 linked list
  • 高级:栈 stack, 队列 queue, 双端队列 deque, 集合 set, 映射 map (hash or map), etc

• 二维:
  • 基础:树 tree, 图 graph
  • 高级:二叉搜索树 binary search tree (red-black tree, AVL), 堆 heap, 并查集 disjoint set, 字典树 Trie, etc

• 特殊:
  • 位运算 Bitwise, 布隆过滤器 BloomFilter • LRU Cache

注意:了解每个数据结构的原理和代码框架


算法

  • If-else, switch —> branch(跳转语句,表示逻辑的切换)

  • for, while loop —> Iteration(循环,for loop 也可以写成 which)

  • 递归 Recursion (Divide & Conquer分治, Backtrace回溯)

  • 搜索 Search: 深度优先搜索 Depth first search, 广度优先搜索 Breadth first search, A*, etc

  • 动态规划 Dynamic Programming

  • 二分查找 Binary Search

  • 贪心 Greedy

  • 数学 Math , 几何 Geometry
注意:在头脑中回忆上面每种算法的思想和代码模板

前三点就类似于几何里面的公理一样,是算法最基础最基础的地方,是所有算法和数据结构的基石.任何的高级的算法数据结构,
到了最后都会转换成 if...else或者for…loop或者递归.最终的根本就是找到它的重复单元,基于它的重复单元,
你就可以泛化成下面的这些高级的数据结构

Homework:自己动手绘制一份数据结构和算法脑图 

 

Deliberate Practicing 刻意练习

• 刻意练习 — 过遍数(五毒神掌)

• 练习缺陷、弱点地方

• 不舒服、不爽、枯燥

 

Feedback 反馈

• 即时反馈

• 主动型反馈(自己去找)

  • 高手代码 (GitHub, LeetCode, etc.)

  • 第一视角直播

• 被动式反馈(高手给你指点)

  • code review

  • 教练看你打,给你反馈 

 

切题四件套

(是针对单个题目的)

注意:

  首先对于单个题目的话,大家在写任何一个题目或者面试题之前,我希望大家养成这四步系统化的思考题目的方式,这里简称为"切题四件套".

  "切题四件套"和下面的"五毒神掌"是个体和全部的关系.

• Clarification : 遇到任何一个题目,自己多看几遍题目,和面试官反复沟通这个题目,确保自己对这个题目的理解是正确的

• Possible solutions: 想所有可能的解法来解这个题目.不要只用想到的第一种解法去解,关键在于把所有可能的解法首先先过一遍,同时比较不同的方法它们的时间和空间复杂度,从中找出最优的一种解法(一般就是时间最快的一种解法).

  • compare (time/space)  比较每一种解法的时间/空间复杂度

  • optimal(加强)  最佳的 

• Coding(多写): 写代码

• Test cases: 写完之后把测试样例能够列举几个.一方面能够测试自己的程序是否正确,另一方面也给面试官一个感觉,你是有始有终的,最后会给自己程序的正确性进行一个反复的测试.

 

五遍刷题法

又叫 "五毒神掌"

注意:任何一个题目的话,你要(至少)做五遍.

刷题第一遍

• 5分钟:读题 + 思考

• 直接看解法:注意!多解法,比较解法优劣(注意:算法本身是要理解和运用,而不是自己去发明和创造.所以这里在没有解题思路的情况下,直接看别人的解法并比较不同解法的优劣;如果有思路,就是上面的"切题四件套"了)

• 背诵、默写好的解法: 背诵和默写很重要,记忆之后一般百分百能理解,但是可能需要反复很多遍之后! 

 

刷题第二遍

• 马上自己写 —> LeetCode 提交: 反复修改,直到是"通过"的状态.

• 多种解法比较、体会 —> 优化! 

 

刷题第三遍

• 过了一天后,再重复做题

• 不同解法的熟练程度 —> 专项练习: 针对不熟的题目或者不熟的解法

 

刷题第四遍

• 过了一周:反复回来练习相同题目 

• 不同解法的熟练程度 —> 专项练习: 针对不熟的题目或者不熟的解法

 

刷题第五遍

• 面试前一周恢复性训练 

 

小结

  • 职业训练: 拆分知识点、刻意练习、反馈

  • 五遍刷题法(五毒神掌)
  • 做算法题的最大误区:只做一遍

  

 

posted on 2020-04-19 13:53  Lyf凤  阅读(134)  评论(0)    收藏  举报

导航

levels of contents