数据结构
- 算法有时就是选择合适的数据结构
- 算法中常用数据结构:散列表,队列,栈,集
常见算法
- 迭代
- 递归
- 动态规划
- 贪心算法
- 回溯算法:迷宫找路
- 搜索算法:深度、广度
- 排序算法
- 分治法:具有代表的二分法
- 穷举法
递归
- 基例条件(递归结束的条件),递归链条
- 递归是一种编程技巧,一种解决问题的思维方式;分治算法和动态规划很大程度上是递归思想基础上的(虽然动态规划的最终版本大都不是递归了,但解题思想离不开递归),解决更具体问题的两类算法思想;贪心算法是动态规划算法的一个子集,可以更高效解决一部分更特殊的问题。
- 递归代码最重要的两个特征:结束条件和自我调用。自我调用是在解决子问题,而结束条件定义了最简子问题的答案。递归代码的精髓在于调用自己去解决规模更小的子问题,直到到达结束条件
分而治之
归并排序把待排序数组不断二分为规模更小的子问题处理,这就是 “分而治之” 这个词的由来。显然,排序问题分解出的子问题是不重复的,如果有的问题分解后的子问题有重复的(重叠子问题性质),那么就交给动态规划算法去解决
搜索算法
- 广度优先,最短路径
- 深度优先
贪婪算法
- 局部最优,全局最优
算法思考方向
自下而上,还是自上而下
- 正向:从问题出发。
- 反向:从结果出发。
算法记忆口诀
分心去搜索,排序好的迭代、递归和动态规划,需要使用回溯的枚举。
回溯
一般使用数组,并且不能改变入参的值
备忘录
避免重复计算,缓存计算过的值,使用数组,二维数组,散列表进行缓存