什么是动态规划

RS
RS
管理员
356
文章
0
粉丝
技术•随笔评论2,824字数 991阅读3分18秒阅读模式

什么是动态规划-图片1

什么是动态规划-图片2

什么是动态规划-图片3

什么是动态规划-图片4

————————————

什么是动态规划-图片5

什么是动态规划-图片6

什么是动态规划-图片7

题目:

有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。

比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。

什么是动态规划-图片8

再比如,每次走2级台阶,一共走5步,这是另一种走法。我们可以简写成 2,2,2,2,2。

什么是动态规划-图片9

当然,除此之外,还有很多很多种走法。

什么是动态规划-图片10

什么是动态规划-图片11

什么是动态规划-图片12

什么是动态规划-图片13

什么是动态规划-图片14

什么是动态规划-图片15

————————————

什么是动态规划-图片16

什么是动态规划-图片17

什么是动态规划-图片18

什么是动态规划-图片19

什么是动态规划-图片20

什么是动态规划-图片21

什么是动态规划-图片22

第一种情况:

什么是动态规划-图片23

第二种情况:

什么是动态规划-图片24

什么是动态规划-图片25

什么是动态规划-图片26

什么是动态规划-图片27

什么是动态规划-图片28

什么是动态规划-图片29

把思路画出来,就是这样子:

什么是动态规划-图片30

什么是动态规划-图片31

什么是动态规划-图片32

什么是动态规划-图片33

什么是动态规划-图片34

什么是动态规划-图片35

F(1) = 1;

F(2) = 2; 

F(n) = F(n-1)+F(n-2)(n>=3)

什么是动态规划-图片36

什么是动态规划-图片37

什么是动态规划-图片38

什么是动态规划-图片39

什么是动态规划-图片40

什么是动态规划-图片41

什么是动态规划-图片42

什么是动态规划-图片43

什么是动态规划-图片44

方法一:递归求解

什么是动态规划-图片45

由于代码比较简单,这里就不做过多解释了。

什么是动态规划-图片46

什么是动态规划-图片47

什么是动态规划-图片48

什么是动态规划-图片49

什么是动态规划-图片50

什么是动态规划-图片51

什么是动态规划-图片52

什么是动态规划-图片53

什么是动态规划-图片54

什么是动态规划-图片55

什么是动态规划-图片56

什么是动态规划-图片57

如图所示,相同的颜色代表了方法被传入相同的参数。

什么是动态规划-图片58

什么是动态规划-图片59

什么是动态规划-图片60

方法二:备忘录算法

什么是动态规划-图片61

在以上代码中,集合map是一个备忘录。当每次需要计算F(N)的时候,会首先从map中寻找匹配元素。如果map中存在,就直接返回结果,如果map中不存在,就计算出结果,存入备忘录中。

什么是动态规划-图片62

什么是动态规划-图片63

什么是动态规划-图片64

什么是动态规划-图片65

什么是动态规划-图片66

什么是动态规划-图片67

什么是动态规划-图片68

什么是动态规划-图片69

什么是动态规划-图片70

什么是动态规划-图片71

什么是动态规划-图片72

什么是动态规划-图片73

什么是动态规划-图片74

什么是动态规划-图片75

什么是动态规划-图片76

什么是动态规划-图片77

什么是动态规划-图片78

什么是动态规划-图片79

什么是动态规划-图片80

什么是动态规划-图片81

什么是动态规划-图片82

什么是动态规划-图片83

方法三:动态规划求解

什么是动态规划-图片84

程序从 i=3 开始迭代,一直到 i=n 结束。每一次迭代,都会计算出多一级台阶的走法数量。迭代过程中只需保留两个临时变量a和b,分别代表了上一次和上上次迭代的结果。 为了便于理解,我引入了temp变量。temp代表了当前迭代的结果值。

什么是动态规划-图片85

什么是动态规划-图片86

什么是动态规划-图片87

什么是动态规划-图片88

什么是动态规划-图片89

什么是动态规划-图片90

什么是动态规划-图片91

题目二: 国王和金矿

有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?

什么是动态规划-图片92

什么是动态规划-图片42

什么是动态规划-图片94

什么是动态规划-图片95

什么是动态规划-图片96

方法一:排列组合

每一座金矿都有挖与不挖两种选择,如果有N座金矿,排列组合起来就有2^N种选择。对所有可能性做遍历,排除那些使用工人数超过10的选择,在剩下的选择里找出获得金币数最多的选择。

代码比较简单就不展示了,时间复杂度也很明显,就是O(2^N)。

什么是动态规划-图片97

什么是动态规划-图片98

什么是动态规划-图片99

什么是动态规划-图片100

什么是动态规划-图片101

什么是动态规划-图片102

什么是动态规划-图片103

什么是动态规划-图片104

什么是动态规划-图片105

什么是动态规划-图片106

什么是动态规划-图片107

什么是动态规划-图片108

什么是动态规划-图片109

什么是动态规划-图片110

什么是动态规划-图片111

什么是动态规划-图片112

什么是动态规划-图片113

什么是动态规划-图片114

什么是动态规划-图片115

什么是动态规划-图片116

什么是动态规划-图片117

F(n,w) = 0    (n<=1, w<p[0]);

F(n,w) = g[0]     (n==1, w>=p[0]);

F(n,w) = F(n-1,w)    (n>1, w<p[n-1])  

F(n,w) = max(F(n-1,w),  F(n-1,w-p[n-1])+g[n-1])    (n>1, w>=p[n-1])

其中第三条是补充上去的,原因不难理解。

什么是动态规划-图片118

什么是动态规划-图片119

什么是动态规划-图片120

方法二:简单递归

把状态转移方程式翻译成递归程序,递归的结束的条件就是方程式当中的边界。因为每个状态有两个最优子结构,所以递归的执行流程类似于一颗高度为N的二叉树。

方法的时间复杂度是O(2^N)。

方法三:备忘录算法

在简单递归的基础上增加一个HashMap备忘录,用来存储中间结果。HashMap的Key是一个包含金矿数N和工人数W的对象,Value是最优选择获得的黄金数。

方法的时间复杂度和空间复杂度相同,都等同于备忘录中不同Key的数量。

什么是动态规划-图片121

什么是动态规划-图片122

什么是动态规划-图片123

什么是动态规划-图片124

什么是动态规划-图片125

什么是动态规划-图片126

什么是动态规划-图片127

什么是动态规划-图片128

什么是动态规划-图片129

什么是动态规划-图片130

什么是动态规划-图片131

什么是动态规划-图片132

什么是动态规划-图片133

什么是动态规划-图片134

什么是动态规划-图片135

什么是动态规划-图片136

什么是动态规划-图片137

什么是动态规划-图片138

什么是动态规划-图片139

什么是动态规划-图片140

什么是动态规划-图片141

什么是动态规划-图片142

什么是动态规划-图片143

什么是动态规划-图片144

什么是动态规划-图片145

什么是动态规划-图片146

什么是动态规划-图片147

方法四:动态规划

什么是动态规划-图片148

方法利用两层迭代,来逐步推导出最终结果。在外层的每一次迭代,也就是对表格每一行的迭代过程中,都会保留上一行的结果数组 preResults,并循环计算当前行的结果数组results。

方法的时间复杂度是 O(n * w),空间复杂度是(w)。需要注意的是,当金矿只有5座的时候,动态规划的性能优势还没有体现出来。当金矿有10座,甚至更多的时候,动态规划就明显具备了优势。

什么是动态规划-图片149

什么是动态规划-图片150

什么是动态规划-图片151

什么是动态规划-图片152

什么是动态规划-图片153

什么是动态规划-图片154

什么是动态规划-图片155

什么是动态规划-图片156

什么是动态规划-图片157

什么是动态规划-图片158

什么是动态规划-图片159

什么是动态规划-图片160

什么是动态规划-图片161

什么是动态规划-图片162

继续阅读
 
RS
  • 本文由 RS 发表于2017年6月22日 22:21:23
unraid安装所需的工具 技术•随笔

unraid安装所需的工具

中文语言包: 翻译完成后,如您希望在本地(临时)测试结果, 需要将文本文件压缩到单个ZIP文件中. 将ZIP文件命改为您翻译的语言, 例如. zh_CN.zip. 在WEB GUI中如下设置: 工具 ...
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证