[算法][动态规划]动态转移过程与Python实现小样两例(切绳子与跳台阶)


写在前面

  • 这是我对动态规划一些入门题的笔记,主要便于随时随地的回顾这些基础内容。
  • 基本都是些简单题目,因为复杂的题目代码太长,不便于作为笔记进行重温。

1 动态规划要义

在重温动态规划的时候,看到了一句类似GNU's Not Unix的语句:

Those who cannot remember the past are condemned to repeat it.

这句话告诉了我们迭代和回溯在DP算法框架中的重要性,或者说找到核心状态及其转移方程的内涵。

1.1 编程领域的动态规划是什么

应当区分在控制领域的动态规划问题,因为控制领域的动态规划确实通过梯度等方式实现了搜索和目标值下降过程。

  • 个人认为基于动态规划的编程是一种高效的枚举方法,通过先前的经验,将子问题递推得到原问题的解。其过程更偏向于随机过程,或者某种意义上的马尔科夫链。
  • 甚至,我不觉得这是一种>传统意义上的数学优化<方法,因为并没有什么目标通过迭代得到了优化和降低。或者说,DP是一种逻辑寻优方法,而不是一种通过大量搜索使得系统目标值降低(升高)的优化方法——当然,二者最终的目的都是得到一个最优解。
  • 尽管在《Dynamic Programming》提到了optimization一词,但是这个词的意义更偏向于"最优解",是基于DP算法框架通过高效的状态转移和枚举得到最优解;从下面这段引用也可以看出它与“目标优化”这个动态过程没有什么太大关系,更多的是在告诉我们DP算法的回溯结构:

In terms of mathematical optimization, dynamic programming usually refers to simplifying a decision by breaking it down into a sequence of decision steps over time. This is done by defining a sequence of value functions V 1 , V 2 , . . . , V n V_1, V_2, ..., V_n V1,V2,...,Vn taking y y y as an argument representing the state of the system at times i i i from 1 1 1 to n n n. The definition of V n ( y ) V_n(y) Vn(y) is the value obtained in state y y y at the last time n n n. The values V i V_i Vi at earlier times i = n − 1 , n − 2 , . . . , 2 , 1 i = n −1, n − 2, ..., 2, 1 i=n1,n2,...,2,1 can be found by working backwards, using a recursive relationship called the Bellman equation. For i = 2 , . . . , n , V i − 1 i = 2, ..., n, V_{i−1} i=2,...,n,V

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值