算法3B
- 分而治之,彼此有关联时,不太适用
- 动态规划一定程度上可以解决彼此关联的子任务
fibonacci recursion
- 斐波拉契数列
- 任何一项都是前两项的和
- 0 1 1 2 3 5 8 13
- 输出到43项左右的时候,打印的速度变得很慢,并且越来越慢
- 可以把递归过程中生成的实例画出来
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJjm0hbk-1601321277522)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929015212038.png)]
- 会发现里面有很多的重复,尤其是递归基(绿色)种最底层的,重复的就更多了
- O(fib(n)) = O(fai^n)
- fai = 0.618
- fai^5 约等于 10
- fai^36 约等于 2^25
- 10^3 约等于 2^10
- 10^9 约等于 2^30 约等于 fai^43次方 (程序执行1秒钟的计算量)
fibonacci:memoization
- 消除递归的算法
- 记忆化
- 尤其是递归的底层,是指数爆炸式增长的,通过记录,只需要去查询一下
- 递归的简单形式
- 递归基 if(n<1) return trivial(n)
- 递归关系式 return fib(n-x)+fib(n-y)
- 改进:在计算前判断一下结果是否有,没有的话才调用递归计算
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SkXFTdIb-1601321277525)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929020249250.png)]
- 临时值保存在栈中,黄色部分不再向下递归
- 灰色部分甚至都没有创建,
power:a^98765
-
a(9X104 + 8x10^3 + 7X10^2 + 6X10 + 5)
-
基底
- 10^4 10^3 10^2 10^1
SPU:shortest path upward
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCVPdeRV-1601321277526)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929021402771.png)]
-
选择一个柜台依次结账出去
-
每个柜台消耗的时间不一样
- 选择的柜台只能有三个
- 上,左上,右上
-
最优的路可能有多条
-
d:delay w:wait,
-
k(i)
- k-1(i-1)
- k-1(i)
- k-1(i+1)
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKrddlZN-1601321277529)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200928203211532.png)]
-
d只走出这个柜台的时间
-
k代表第几层
-
w代表柜台收银员消耗的时间,自己消耗的时间
-
致命的问题:会有大量的重复
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WARFRElB-1601321277531)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200928203556191.png)]
- 每个重复3次
-
每当把k行算完,利用数学归纳法,就可以算k+1行
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNrpkI0i-1601321277532)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200928204205437.png)]
-
计算流程
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qCyegqCu-1601321277533)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929022746195.png)]
LMP:Longest Manhattan Path
-
不能绕路,每个点可以获得红包,求能捡到的红包总数
-
只能向右或者向下
-
倒过来思考,从终点,向左,向上行走
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SAMxoT2r-1601321277534)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929023116723.png)]
LCS:Longest common subsequence
- 同时是两个序列的子序列,称为公共子序列
- 最长公共子序列可能不唯一
LCS:decrease and conquer
-
如果末尾有相同字段,可以去掉这个字段,再去比较新的序列,也就是decrease and conquer
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vADIhTq5-1601321277535)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929024248885.png)]
-
如果最后的字符不等,可以将序列分成两个子任务执行
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8tOOIVN-1601321277536)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929024342319.png)]
LCS:DP
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XMJGR1IS-1601321277537)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200929025822952.png)]
背包问题
- 选择价值越高、重量越轻的物品
- 物品重量不要超过背包限制,同时价值最大