动态规划之一:凑钱

本文介绍了动态规划的概念,包括最优子结构和重叠子问题的性质,并通过解决用1元、3元、5元硬币凑够11元的最少硬币数量问题,详细阐述了动态规划的思路和状态转移方程,展示了如何利用动态规划避免重复计算并优化问题求解。
摘要由CSDN通过智能技术生成

动态规划

     适用动态规划解决的问题,经分解得到的子问题往往不是互相独立的,通过把原问题分解为相对简单的子问题的的方式求解复杂问题的方法,求解的问题要具备最优子结构性质重叠子问题性质的基本要素。

基本思想:

如果给定一个问题,我们可以分解为不同的子问题且能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,从而得到多项式时间算法。为了达到此目的,可以用一个表来记录所有已解决的子问题的答案。不管该问题以后是否被用到,只要它被计算过,就将其结果填入表中。

使用动态规划算法我们需要额外开辟一段内存空间(表),来保存中间计算的结果,可以看成是以空间换时间的典型算法。

动态规划算法使用于解最优化问题(最大值或最小值),一般步骤归纳为:

  1. 找出最优解的性质,并刻画其结构特征。
  2. 递归地定义最优值。
  3. 以自底向上的方式计算出最优值,
  4. 根据计算最优值时得到的信息,构造最优值。

最优子结构性质

   含义:该问题的最优解包含分解的子问题的最优解,可以对此性质进行证明。也可以描述为最优解即最优解状态,我们要通过最优子结构性质已知的该问题最优解状态找到子问题最优解的状态转移函数,最后由子问题的最优解与边界来求解。

   利用此性质的主要作用是获取状态转移函数。

重叠子问题性质

 含义:在用递归自底向上解决问题时,每次产生的子问题并不都是新问题,有些子问题被反复计算多次,动态规划算法正是利用了子问题重叠性质,对每个子问题只解一次,而后将其解保存在一个表格中,在以后尽可能多地利用这些子问题的解。由该问题分解的众多子问题中要存在重复,这样才能使程序在多项式的时间内的运行完毕,提高效率。

   利用此性质的主要作用是提供一个表格存储中间计算结果,避免重复计算。

下面是一

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值