当前位置:   article > 正文

动态规划算法Dynamic Programming_动态规划算法被称为是时空权衡的一种策略,如何理解?

动态规划算法被称为是时空权衡的一种策略,如何理解?

一、动态规划概述

动态规划常常与分治策略、贪心算法同时提及,三种算法都是通过组合子问题的解来求解原问题。在解决某些问题时,其子问题有大量的重叠情况,此时单纯使用分治策略会发现随着输入数据量的增大,运行时间呈指数级增长。动态规划是一种典型的用空间换时间的权衡策略。其核心思想就是将那些重复的子问题的解,记录下来,当需要再次相同子问题时,查表获取结果即可。动态规划通常用来求解最优化问题,适用问题通常有以下两个特点:1.具有最优子结构性质:问题的最优解由相关子问题的最优解组合而成。2.有大量的重叠子问题。二、钢条切割问题问题:Serling公司购买长钢条,将其切割为短钢条出售。假设切割工序没有成本,不同长度的钢条的售价如下:
钢条的价格
问题分析:考虑 n = 4 的情况,那么有以下几种切割方式:

1.切割为四段,长度为:1,1,1,1;总共卖41=4元。
2.切割为三段,长度为:1,1,2;总共卖2
1+15=7元。
3.切割为两段,长度为:1,3;总共卖1
1+18=9元。
4.切割为两段,长度为:2,2;总共卖2
5=10元。
5.不切割,长度为:4;总共卖1*9=9元。
更一般的,对于r(n),我吗可以利用更短的钢条的最优化切割收益来描述它:
r(n)=max{p(n),r(1)+r(n-1),r(2)+r(n-2),…,r(n-1)+r(1)}
p(n)对应不切割,直接出售长度为n英寸的钢条,其他n-1个参数对应另外n-1种方案:对每个i=1,2…n-1,首先将钢条提起过为长度i和n-i的两段,接着求解这两段的最优收益r(i)和r(n-i)(每种方案的最优收益为两段的最优收益之和)。由于无法预知哪种方案会获得最优收益,我们必须考察所有可能i,选取其中收益最大者。如果直接出售最大,我们就不做任何切割。
在这里插入图片描述

二、自顶向下递归实现:

伪代码如下

infinity = 1e+16 #无穷大

CUT-ROD(p, n)
  if n == 0
      return 0
  q = -infinity
  for i = 1 to n
      q = max(q, p[i] + CUT-ROD(p, n-i))
  return q
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
重复计算问题
重复计算问题

三、动态规划算法一:带备忘录的自顶向下法

伪代码如下

infinity = 1e+16 #无穷大

MEMOIZED-CUT-ROD(p, n)
  let r[0..n] be a new array
  for i = 0 to n
      r[i] = -infinity
  return MEMOIZED-CUT-ROD-AUX(p, n
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号