`
yunmanfan
  • 浏览: 96042 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

动态规划

阅读更多

基本思想

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。

基本结构

阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,称这种解决多阶段决策最优化问题的方法为动态规划方法。

  动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划,可以解决各类最优化问题。因此在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。

基本模型

 根据上例分析和动态规划的基本概念,可以得到动态规划的基本模型如下:

  (1)确定问题的决策对象。 (2)对决策过程划分阶段。 (3)对各阶段确定状态变量。 (4)根据状态变量确定费用函数和目标函数。 (5)建立各阶段状态变量的转移过程,确定状态转移方程。

适用条件

任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。同样,动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效性。

  1.最优化原理(最优子结构性质) 最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。

  2.无后效性 将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。

  3.子问题的重叠性 动态规划将原来具有指数级复杂度的搜索算法改进成了具有多项式时间的算法。其中的关键在于解决冗余,这是动态规划算法的根本目的。 动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。

 

 

分享到:
评论

相关推荐

    什么是动态规划(Dynamic Programming)?动态规划的意义是什么? - 知乎1

    动态规划(Dynamic Programming,简称DP)是一种用于解决最优化问题的算法思想,它通过将大问题分解为相互重叠的子问题,并存储子问题的解,以避免重复计算,从而达到高效求解的目的。DP的核心在于它能够识别并利用...

    动态规划入门动态规划入门动态规划入门动态规划入门

    动态规划是一种重要的算法思想,广泛应用于解决复杂的问题,如最优化、组合优化等。它的核心概念包括重叠子问题、最优子结构和状态转移。 1. 重叠子问题:这是动态规划区别于分治算法的一个关键特征。在动态规划中...

    动态规划1

    动态规划是一种解决问题的方法,它通过将复杂问题分解成更小的子问题来求解,通常应用于优化问题。在这个“动态规划1”的例子中,我们有两个不同的动态规划问题。 第一个问题涉及构建最小代价子母树。这是一个典型...

    动态规划总结

    动态规划是一种强大的算法思想,广泛应用于计算机科学,特别是在解决最优化问题时。在这个总结中,我们将深入探讨动态规划在ACM(国际大学生程序设计竞赛)中的应用,包括基础DP、背包问题、数位DP和概率DP等核心...

    动态规划求最小规划距离1

    动态规划是一种解决复杂问题的有效方法,它通过将大问题分解为更小的子问题来求解。在本题中,动态规划被应用于计算两个字符串的扩展距离。扩展距离是指在字符串A和B之间插入若干空格使得两者长度相等后,对应位置...

    动态规划 动态规划.zip

    动态规划是一种重要的算法思想,广泛应用于计算机科学和数学领域,特别是在解决优化问题时。它通过将复杂问题分解为更小的子问题,并存储这些子问题的解,避免了重复计算,从而达到高效求解的目的。动态规划的核心...

    动态规划笔记

    昨天在牛客网上做笔试题,碰到了一道题动态规划做了一晚上都没做出来,最后看着别人的答案才勉强做出来,太菜了,今天总结一下。 动态规划思路: 1、找到状态和选择,确定当前状态和转换 2、明确dp数组/或函数的定义...

    动态规划python.txt

    动态规划是一种在多个领域内用来解决复杂问题的数学方法,尤其适用于那些具有重叠子问题和最优子结构性质的问题。这种方法把一个复杂问题分解成一系列相对简单的子问题,并通过递归方式或者表格填充的方式来求解,...

    UAVS-动态规划模型

    动态规划是一种算法设计技术,其核心思想是将复杂问题分解为更小的子问题,通过求解子问题来得到整个问题的解。这种策略在处理具有重叠子问题和最优子结构特征的问题时非常有效,尤其在计算最优策略(如最小化或最大...

    动态规划之选数问题_动态规划_

    动态规划是一种强大的算法工具,广泛应用于计算机科学,特别是在优化问题中。这个主题“动态规划之选数问题”探讨了如何利用动态规划解决一类特定的选择或组合问题。MATLAB作为一种强大的数值计算和编程环境,是实现...

    动态规划代码

    动态规划的python代码,可用于动态规划的编写,在编程中常用解决最长公共子序列问题、矩阵连乘问题、凸多边形最优三角剖分问题、电路布线等问题。

    动态规划-TSP.doc

    动态规划解决 TSP 问题 动态规划是一种非常重要的算法思想,在解决复杂问题时非常有用。本次实验主要解决了旅行商问题(TSP),即一个旅行商人要拜访 n 个城市,他必须选择所要走的路径,路径的限制是每个城市只能...

    动态规划解决TSP问题用动态规划算法求解TSP,数据为Solomon数据集的c101文件读取,可视化路径图,用图展示每次迭代的最

    动态规划是一种解决问题的有效方法,尤其在处理具有重叠子问题和最优子结构的复杂问题时。旅行商问题(Traveling Salesman Problem, TSP)是一个经典的组合优化问题,它的目标是找到一个城市的最短可能路线,使得...

    python+动态规划算法

    python+动态规划算法

    01背包问题动态规划01背包问题动态规划

    在"dynamic-programming-master"这个压缩包中,可能包含了一些关于动态规划的代码示例、练习题目和解题思路,对于学习和理解动态规划,特别是01背包问题的动态规划解法,是非常有帮助的。建议解压后仔细研究其中的...

    动态规划 源码

    动态规划是一种重要的算法思想,广泛应用于计算机科学,特别是在软件开发中。它主要通过解决子问题来构建全局最优解,避免了重复计算,提高了效率。在这个“动态规划源码”锦集中,我们可以找到各种动态规划算法的...

    3动态规划1

    动态规划是一种强大的算法设计方法,尤其适用于解决具有重叠子问题和最优子结构的复杂问题。在这个“3动态规划1”的主题中,我们将探讨几种经典的应用,包括硬币收集问题、多段图最短路径、0/1背包问题、矩阵乘法链...

    算法动态规划

    动态规划是一种在计算机科学中广泛使用的算法设计方法,特别是在解决最优化问题时。它通过将复杂问题分解为更小的子问题来求解,而这些子问题的解决方案可以被组合以形成原问题的解答。本资源包含的是关于动态规划...

    动态规划.ppt

    动态规划是解决多阶段决策问题最优化的一种数学方法,大约产生于50年代,1951年美国数学家数学家贝尔曼(R.Bellman)等人根据多阶段决策问题的特点,把多阶段决策问题变换为一系列相互联系的单阶段问题,然后逐个加以...

Global site tag (gtag.js) - Google Analytics