2016.8.25 递推
由于博客是写给自己看的,所以用到了大量简写题也没有写出来,有需要的可以联系我要题目的pdf,本章ppt,讲义以及题目测试数据,由于上传不方便我就不上传了,联系邮箱SindarDawn@163.com
注:数列样式从0开始
小知识:其实所有的加法都暗含了*1,这就可以解释为什么有时是加法原理而有时是乘法原理;
注意:加法和乘法的选择一定要注意,
一.定义理解:用若干步简单运算来描述复杂问题,中间不存在取舍(区分开DP:求结果VS求最优)(但判断啊循环啊之类的语句还是可以有的),可顺(已知到问题)可逆(问题到已知)(区分开递归:递归函数调用自身),如果是逆向的话记忆化可以节约很多时间,有的情况下可以直接用通项公式解决(要小心中间运算溢出);
特殊的迭代;(相比之下搜索就是把每一种情况的图都画出来)
优化:前缀和,找公式,找公式相同部分;
二.典型标志:有意义的数列(找规律)
三.方法/模板:找最小互不相同模块!
1.固定数列先找再证明:
1).Fibonacci数列
递推公式:F(n)=F(n-1)+F(n-2);
数列性质:兔子繁殖(刚出生的等于上上次的兔子数也就是生的兔子(因为,下一个月新增的兔子不能生)加上上个月的兔子(也就是兔子总数));
数列样式:1,1,2,3,5,8,13,21,34;
思维亮点:
①这个式子同样适用于与其性质不同的一步两步上楼梯问题,事实上,他们等于前者
加上前前者的原因各不相同,而上楼梯问题显然归属于另一个更广阔的递推类型:
确定当前状态递推;
②这个式子同时还可以用另一种方式解决,非常巧妙,虽然时间复杂度还要略微高一
点,这大概就是传说中的不是正解胜似正解吧;(但这个方法的合理性只在一道题
上有用,也就是1*2的棋子横竖放,棋盘为n*2 小紫10.3.1.4,当然在其他题里面,
如果直接把一般砍掉还是可以理解的(重复不考虑原则))
方法是这样的:选定从左至右的第一个为竖着的,则左边为偶数则为1,为奇数则
为0,右边就是原来的;
思维亮点:从中间考虑;漏洞百出的算法一直打补丁也有可能变对;
③自己想了一种方法,不过只能用于2的次方所以没有什么用,就是分治,比如
f8=f4*f4+f3*f3(因为把两个的放中间了),不过到后来,连f(n-1)都没有了,所以这
个方法完全没有什么用啊(欲哭无泪);
2).平面分割问题
递推公式:an=a(n-1) +2(n-1);
思维亮点:这种题很灵活,要看出其中的模型,也要分清这个模型和容斥的联系;
3).Catalan数:
递推公式:累加CiCn-i+1,i从2到n-1,C3定为1,:定一点,剩下两点相乘;
本质很容易理解却比较复杂,其实和排列组合(点中选点)也有一定关系,不过这
些都是后话了;
4).第二类Stirling数:
递推公式:S(n,m)=m*S(n-1,m)+S(n-1,m-1);
集合类问题也很容易理解其本质,这种确定当前状态的方式也很别致,很经典的一
道题,很经常遇到以这题为模板的题;
四.融会贯通:
(一).典型上手例题:
1.Fibonacci数列
2.平面分割问题:
1).平面分割: 小黄2.3.8;
从小分析到大;
2.确定当前状态递推:
1).Tower of Hanoi:小紫10.3.1.1;
一个非常典型的题,只求方案数不要求输出路径的解法是标准递推,要注意边界;
思维亮点:
①上面的式子还可以进一步简化成2^n -1,但如果不用快速幂算法的话
时间复杂度是一样的;
②引入一种新的证明方法叫做:数学归纳法,是从递归的角度从小开
始证明的;
2).数塔问题 :小黄2.3.1:
新手上手问题,我个人倾向于认为这是DP,因为有阶段有状态有决策转移;
思维亮点:从后向前推可以免去一次最后层循环(用于能拿多少拿多少的程序简化);
3).棋盘格数: 小黄2.3.3
需要常规的分析而且需要提炼公式(如果n,m很大的话),所以一定要在相出算法
以后看看能不能再简化!这道题还不错,作为入手可以思考一下;
4).昆虫繁殖: 小黄2.3.4
其实确定当前状态范围很大,比如类似斐波那契数列的昆虫繁殖;这道题可以根据
前后关系用一个数组搞定,不过容易错一般没必要;(必然性数列);
5).位数问题: 小黄2.3.5
定当前奇偶(也就是唯一的影响因素)来继续推,杨钊的那道线性动规也体现了这
一点,很经典,很重要;
6).过河卒: 小黄2.3.6
很经典的矩阵递推,边界处理很重要,还是常见问题:变量,初始化;
3.最小单元递推(特殊的确定当前状态递推):
1)1*2的棋子可横或竖放,棋盘为n*2 小紫10.3.1.4
(二).经典错误例题:
1.火车站:推式子时不能忽略,一定要兼顾所有项,养成自己的编程习惯,不要受制
于题给变量的名称,要考虑极端情况的适用性;
(三).较高难度例题:
1.极值问题:小黄练习6;
很重要的数学思想:迭代轮换!其实是披着递推模板但实质是数论的题;