动态规划其实质上是通过开辟记录表,记录已求解过的结果,当再次需要求解的时候,可以直接到
那个记录表中去查找,从而避免重复计算子问题来达到降低时间复杂度的效果。实际上是一个空间
换时间的算法。动态规划,通常可以把指数级的复杂度降低到多项式级别。
一般算法书都会讲能不能用动态规划来求解问题,通常是判断有没有最有解结构,通常是通过“剪
切技术”来判断:即证明问题的一个最优解中,使用的子问题的解本身也必须是最优的。通常是假
设一个子问题不是最优的,那么找到一个最优的子问题来替换这个子问题,那么产生的最优解将优
于已找到的那个最优解,从而矛盾。
其实用不用动态规划来求解问题,还有一个关键是有没有重复的子问题。这也是使用动态规划
与贪心法的区别所在。。贪心法求解的问题也满足最优解结构,只是它能够在每一步都能够“贪婪的
”选出当前唯一的最优子问题,并且当前的选择,是不依赖以前的选择的,通过这种“贪婪的选择”
选到最后时,就得到了全局的最优解了,不会产生重复的子问题。而动态规划,在一步选择的时候,
是通过从以前求出的若干个与本步骤相关的子问题最优解中选择最好的那个,加上这一步的值,来构
造这一步那个子问题的最优解,而如果以前求出的若干个子问题不保存下来,就需要重新求(通常是递
归所致)。动态规划用武之地也无非是保存这些重复的子问题而避免重新求解而达到高效的目的。
动态规划的难点在于写出递推式。动态规划的步骤其实是很固定的,而每一个问题的递推式如何下手
得到会因不同的问题而不同,这是个最关键的问题,没有通用的方法。通常是根据题目的问题,最终要求的问题,都会
有几个数,以两个数M,N为例,然后让求最优值。你就可以使用v[M][N]数组来保存最有解,然后把问题
替换成i,j两个数的问题,试图通过v[i][j]与前面求出来的解建立递推关系。建立递推关系后,你可以简单
的写出递归形式的程序,这个程序只需要加上一条if(v[i][j]已求出) return v[i][j];就轻松改称了动
态规划,这就是lookup的形式。当然如果已经有了递推式,你也很容易写出从底向上推的迭代形式。
一般的算法书讲的动态规划都是来求解最优解的问题,或许最初是用来求解规划问题的,而规划必然是最
优解问题,其实大多数的问题只要存在重复的子问题都可以使用动态规划的思路,就看你的重复的子问题
是不是多的值得使用空间来换时间这个思路了。
分享到:
相关推荐
从给定的文件标题“算法动态规划总结(拓展篇)”和描述“算法动态规划拓展总结,内含详细解说和代码”中,我们可以提炼出一系列关于动态规划算法的知识点,这些知识点涵盖了动态规划的多种应用及其优化技术。...
### 动态规划总结 #### 1. 按状态类型分类 动态规划问题的核心在于定义合适的状态,根据状态的不同可以将动态规划分为不同的类别。这些分类有助于我们更好地理解和解决问题。 ##### 1.1 编号(长度)动态规划 这...
本资料主要对动态规划进行了全面的总结,旨在帮助读者深入理解和掌握这一概念。 一、动态规划基础 动态规划的核心是将一个复杂的问题分解为多个相互关联的子问题,然后通过解决这些子问题来求解原问题。它与分治法...
### 动态规划基础总结 #### 一、概述 动态规划是一种解决最优化问题的方法,其核心思想是将原问题分解成互相重叠的子问题集合,并存储子问题的解来避免重复计算,最终达到求解原问题的目的。本文将对计算机算法中...
### ACM动态规划总结 #### 一、Pkuacm1163 The Triangle:动态规划题目总结(一) **题目链接:** [Pkuacm1163](http://acm.pku.edu.cn/JudgeOnline/problem?id=1163) **题目描述**:给定一个数字构成的三角形,...
动态规划是一种解决问题的有效方法,尤其在处理具有重叠子问题和最优子结构的复杂问题时。在算法分析与设计中,动态规划算法扮演着至关重要的角色。以下是对动态规划算法的详细阐述,以及如何应用于矩阵连乘问题。 ...
这个“PKU之DP试题总结”很可能是北京大学(Peking University,简称PKU)提供的一个资源,汇总了该校涉及动态规划的编程题目,帮助学习者深入理解和掌握这一关键算法。 动态规划的核心思想是将复杂问题分解成若干...
动态规划总结与题目分类 一、简单基础dp 1、递推: 2、背包 3、LIS 4、LCS 二、区间dp 四、数位dp 五、概率(期望) dp 六、状态压缩dp 七、数据结构优化的dp 1、二进制优化 2、单调队列优化 3、斜率优化 4、四边形...
3.徐持衡《浅谈几类背包题》 8.徐源盛《对一类动态规划...对一些DP题目的小结 树型动态规划 树型动态规划和状态压缩动态规划 算法导论第15章-动态规划 最长公共子序列和字符串相似度 最大矩阵连乘次数(最小连乘变形)
动态规划是一种在计算机科学中广泛使用的算法设计策略,特别是在解决最优化问题时。它通过将一个大问题分解成若干小的子问题,并利用...通过不断练习和总结,参赛者能够更好地掌握动态规划的技巧,提高编程竞赛的成绩。
某大牛总结的动态规划学习指南,以pku题目为重点讲解,对于正迷茫于动态规划的ACM,OI选手有很大帮助。
数据结构动态规划算法总结 动态规划是一种重要的算法思想,广泛应用于经济管理、生产调度、工程技术和最优控制等方面。动态规划是解决多阶段决策过程的优化问题的数学方法,由美国数学家R.E.Bellman等人在20世纪50...
总结来说,动态规划是一个强大的工具,它能够处理具有重叠子问题和最优子结构的复杂问题。通过对不同状态类型的深入理解和实践,我们可以解决各种各样的问题,从经典的最短路径、最长公共子序列到更复杂的树型结构...
动态规划(Dynamic Programming,简称DP)是算法设计中的一种重要策略,尤其在解决复杂问题时,如图论、最优化问题、组合优化等。在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest,...
本资源摘要信息涵盖了 NOIP 数学与动态规划的所有方面,包括基础知识、动态规划专题、NOIP 动态规划总结、ACM 动态规划总结、Scratch 创意编程班和人工智能中小学系列课程等,旨在帮助读者快速了解 NOIP 数学与动态...
本实验报告主要探讨了使用动态规划算法解决计算二项式系数的问题。实验者刘春云,专业为软件工程,通过这个实验学习并应用了动态规划这一核心的计算机科学概念。实验指导教师为赵晓平,实验时间为2012年2月21日。 *...
《动态规划算法实验》实验报告主要探讨了两个经典动态规划问题——0-1背包问题和合唱队形安排问题。这两个问题都是在优化决策过程中寻找最优解的经典实例。 **一、0-1背包问题** 0-1背包问题是一个经典的约束优化...
动态规划的核心是通过将复杂问题分解成更小的子问题,然后逐个解决这些子问题,最后组合成原问题的解决方案。本文将通过几个具体的ACM题目来阐述动态规划在背包问题中的应用。 首先,Pku ACM 1163 "The Triangle" ...