【数据结构与算法】极客算法训练营 - 1、算法数据结构与算法总览
数据结构与算法总览
文章目录
记录 极客算法训练营
-
职业训练:拆分知识点、刻意练习、反馈
-
五步刷题法(五毒神掌)
-
做算法题的最大误区:只做一遍
如何有效学习数据结构与算法
预习、互动、练习、分享
1、职业训练:拆分知识点、刻意练习、反馈
如果想要精通一个领域:分为三步走
-
Chunk it up 切碎知识点
-
Deliberate Practicing 刻意练习
-
Feedback 反馈(分为主动式反馈和被动式反馈)
一遍完全不够的 练习多遍
(1)Chunk it up 切碎知识点
- 庖丁解牛
- 脉络连接
tree 树
连接 拆分 整合
每一个点突破 、 练好的基本功
分解数据结构和算法
数据结构
一维:
- 基础:数组 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 最近最少使用 (least recently used)
数据结构
注意:了解每个数据结构的原理和代码框架
算法
- if-else,switch —> branch
- for, while loop —> Iteration
- 递归 Recursion (Divide & Conquer, Backtrace)
- 搜索 Search: 深度优先搜索 Depth first search, 广度优先搜索 Breadth first search, A*, etc
- 动态规划 Dynamic Programming
- 二分查找 Binary Search
- 贪心 Greedy
- 数学 Math , 几何 Geometry
注意:在头脑中回忆上面每种算法的思想和代码模板
算法
算法脑图
数据结构脑图
动手绘制一份数据结构与算法脑图
(2)Deliberate Practicing 刻意练习
职业化运动:
-
基本功是区分业余和职业选手的根本
-
基础动作的分解训练和反复练习
-
刻意练习-过遍数(五毒神掌)5遍起
-
练习缺陷、弱点的地方,可能会不舒服、不爽、枯燥,说明在成长。
-
生活中的例子:乒乓球、台球、游戏等等。
每天都是这么枯燥的练习的 没那么苦逼的 练习练习就好了 还可以。
练习缺陷、弱点地方、不舒服、不爽、枯燥就行。
(3)Feedback反馈
Feedback
- 即时反馈
- 主动型反馈(自己去找)
- 高手代码(Github、LeetCode、etc.)
- 第一视角直播 学习
- 被动式反馈(高手给你指点)
- code review
- 教练看你打,给你反馈
切题四件套
切题四件套:
-
Clarification (审题) 题意
-
Possible solution(解题多种可能性) :想所有可能的解法解这个题目
- compare(time/space) 比较时空 :从时间、空间复杂度比较几种解题思路
- optimal(加强) 最优解
-
Coding(多写)
-
Test cases(测试) (测试样例)
反复沟通,别题目没看清楚就开始写程序
想所有可能的想法去解,比较不同的时间空间搞最优。
写单元测试再解题也可以,测试样例、加强。
2、五步刷题法(五毒神掌)
刷题第一遍:
5分钟:读题+思考(建议不要超过15分钟)
直接看解法:注意!多解法,比较优劣
背诵、默写好的解法
第二遍:
马上自己写–> LeetCode提交 debug至完成
多种解法比较、体会–>优化!
看时间空间 效率 (执行时间和内存消耗)
第三遍:
过了一天后,再重复做题
不同解法的熟练程度–>专项练习
第四遍:
过了一周:反复回来练习相同题目
对于不熟的题目专项练习。
第五遍:
如果有面试,面试前一周进行恢复式训练
3、小结
小结
-
职业训练:拆分知识点、刻意练习、反馈
-
五步刷题法(五毒神掌)
-
做算法题的最大误区:只做一遍
刻意练习 专题练习 反馈
一遍又一遍进行思维巩固、反复练习 理解 干
熟悉、熟练 肌肉记忆了。