①系统性学习:
- 大体 :了解算法意思,熟悉运用场景。
- 举例 : 例如map实现的底层是红黑树,是平衡树的变种,它降低了性能以达到要求,并且它能解决一些平衡树不能解决的问题。
- 系统化的应用/好处:主要是打好基础,当对基础熟练时,一些复杂的数据结构就是基础知识的累加以及变种,这样不会产生畏惧感。
- 思考: 还是以平衡树为例子,可以了解treep,svp,splay三种基本方法的优劣,会不会有更好的优化,透析题目本质 使题目变得抽象,对知识有着更深入的思考。
②高效学习
- 刷题:知乎上附的技能树链接 技能树
-
应用:关于题目 若无ACM要求可刷 Leetcode
网上常用的OJ USACO URAL 北京大学OJ(POJ) 浙江大学OJ(ZOJ) VJ
杭电OJ(HDUOJ) - 如何思考:做一个专题题目,了解该算法解决的是什么样的问题
- 如何再加工:当基础比较扎实时可以考虑看算法导论进行查漏补缺(重点是它公式的推导)
③以DP为例子学习如何进行算法学习
- 目标:求解决策过程最优化的数学方法
-
步骤:
1.寻找子问题(最优化子结构)
2.确定状态(时间复杂度的优化)
3.确保无后效性
4.寻找转移关系和合适的枚举方向
④杂项
- 写复杂数据结构时尽量封装成单个的函数 写一块测一块
- 做不出来题可以看讨论区,看一看别人的思路,而不是照抄别人的代码
- 了解这个算法解决了什么问题,这个算法也可以解决什么问题,做题要做好总结
- 锻炼自己的白板写代码能力,白板写代码能力代表了程序员的思维能力以及逻辑的严谨性