先分享一下《2013年王道论坛计算机考研机试指南》pdf
链接:https://pan.baidu.com/s/1w_nfGVtU40pZrUggAYfQDA
提取码:aaaa
第六章 查找
主要讲了广度优先搜索(BFS),深度优先搜索(DFS)在非图题中的应用,以及递归在查找中的应用,题目都很经典
查找思路
1.首先考虑枚举是否可行,即必须保证其时间复杂度在题目时限可以接受的范围内,然后再寻找其他方法;
2.查找要素(虽然看起来很理论,但是对于复杂的问题慢慢分析还挺有用,不然不知道怎么开始):
- 查找空间,即所有满足题目条件的状态解。如果是枚举,则一个一个验证这些状态是否成立;
- 查找目标,即找到一组符合问题要求的解,即枚举过程中的验证条件;
- 查找方式,寻找合适的方法
例题:胜利大逃亡 BFS应用的例子
广度优先搜索(BFS)
(虽然也是很理论性的东西……但还是先记录一下,因为这一部分真的经常想错……
- 状态。确定求解问题的状态,通过状态的转移扩展,查找遍历所有的状态,从而寻找答案;
- 状态扩展方式。在广度优先搜索中,尽可能扩展状态,先扩展优先的出的状态(队列先进先出);
- 有效状态。只有有效的状态才进行扩展,无效状态直接舍弃,也避免了后面的无效搜索;
- 标记。标记状态是否有效!
- 有效状态数。有效的状态数即与算法的时间复杂度同数量级,用来估算是否在可接收范围内;
- 最优。有时搜索可能要求输出最优方案,搜索的过程也恰好按照某个关键字递增。所以此类问题可考虑BFS。
深度优先搜索(DFS)
- 搜索空间和查找目的与BFS相同;
- 深度优先搜索对状态的查找采用了立即扩展新得到的状态方法,因此,DFS搜索得来的解不具有最优解得特性(无法与其他比较),所以通常应用于解存在性判断。
第七章 动态规划
看着看着突然意识到一个问题【手动微信捂脸笑表情】,看的时候因为知道正处于哪个章节所以,例如,现在看的例题就直接想用动态规划怎么做……然鹅等考试的时候,怎么能思考到题该用啥法,脑阔疼Σ( ° △ °|||)︴
动态规划可能的题目:
1.计数
a. 有多少种方式走到目的地
b. 有多少种方法选出k个数使和为sum
2.求最大值/最小值
a. 从左上角走到右下角路径最大数字和
b. 最长上升子序列
3.求存在性
a. 取石子,先手是否必胜
b. 能不能选出k个数使得和sum
### 最值型动态规划: 1. **确定状态**最后一步是什么状态,转化成子问题 2. **转移方程** 3. **初始条件和边界情况** 4. **计算顺序**,消除冗余,简便计算
讲了错排例题:**公式:** `f[n]=(n-1)(f[n-1]+f[n-2])` ,本来没看太懂,这个博主讲的太明白了!!推荐看这个解释:[错排公式推导点这里](https://blog.csdn.net/bengshakalakaka/article/details/83420150)