动态规划的状态表示

本文探讨了动态规划在求解问题时的状态表示的重要性。动态规划依赖于问题的最优子结构和子问题重叠性质,状态表示必须正确且合理地描述子问题。通过两个问题的实例,分析了不同状态表示对算法性能的影响,强调了正确选择和优化状态表示对于动态规划算法的时间复杂度和空间复杂度的关键作用。同时,文中指出,对于存在维数障碍的问题,动态规划可能不是理想算法,需要寻求其他解决方案。
摘要由CSDN通过智能技术生成

                                        中国科技大学计算机系----黄浩达

一、引言
  问题求解技术,包括两个方面的内容:表示和搜索。在这两个方面的内容中,
搜索是重点,表示是基础。不同的状态表示对搜索的效率会产生极大的影响。一个
粗糙的状态表示可能使得搜索时要对状态变换进行更多的操作,而采取简洁的表示
,搜索时进行的操作可能就显得方便、高效,甚至由于状态表示准确描述了问题的
本质,给人以启示,从而找到更好的搜索技术。动态规划是求解问题的一个重要技
术,它的状态表示在整个算法中有着举足轻重的作用,对整个算法的影响也远比其
他搜索技术中的状态表示更为深刻。
本文以实例对动态规划的状态表示进行一些讨论。

二、 动态规划对状态表示的要求
  在动态规划程序设计中,我们主要利用了问题的两个性质:最优子结构和子问
题重叠。最优子结构指问题的最优解包含了子问题的最优解,它是动态规划方法可
行的理论基础。而一个问题具有子问题重叠性质是指用递归算法自顶向下解这个问
题时,并不总是产生新的子问题,有些子问题被重复求解多次。
  因为最优子结构性质,动态规划求问题最优解时,可以转化为求子问题的最优
解,而对解决过的问题,动态规划则记录它的结果,当再次遇上已解决的问题,就
可以直接利用结果。子问题重叠性质保证了这样做是有意义的。但一般的搜索技术
,对于某个子问题不管是否已经解决过,只要遇上,就会再次对这个子问题进行求
解。
  很明显,动态规划与一般搜索技术最大不同的地方就是记录了已求解过的问题
的结果。这里包含了两个方面的内容 :子问题的记录和子问题结果的记录。其中
,子问题的记录是最重要,也是最为复杂的,它就是通常我们所说的状态表示。
通常我们用一个数、一组数或一个向量来实现状态表示。但无论采取什么方法,从
动态规划的原理来看,状态表示要满足两个要求:正确、合理描述子问题和描述的
子问题满足最优子结构性质;从算法实现角度来看,状态表示必须能够用基本数据
结构实现并且能满足空间要求。
下面通过两个问题来阐述动态规划对状态表示的要求。

问题一:存在一个数字三角形,从顶到底有多条路径, 每一步可沿左斜线向下或
沿右斜线向下。路径所经过的数字之和称为路径得分,要求求出最小路径得分。
例: 
      1 1 
    2 3 2 3 
  3 2 3 3 2 3  
3 8 1 2 3 8 1 2 
最小路径得分=6 
状态表示1-1 
最自然的作法是用一元组(X)描述问题,D(X)表示从顶到达第X层的得分。但是
一元组(X)描述的子问题不能满足最优子结构性质, 因为D(X)的最优解可能不
包含子问题D(X-I)的最优解。这样,动态规划方法是无法在状态表示1-1上应用
的。
状态表示 1-2
用二元组D(X,Y)描述问题,D(X,Y)表示到达第X层第Y个位置时的得分,那么
D(X,Y)的最优解包含了子问题D(X-1,Y)或D(X-1,Y-1)的最优解,状态转
移方程为
D(X,Y)= Max {D(X-1,Y),D(X-1,Y-1)} + A[X,Y]
D(1,1)= A[1,1]
这样,最小路径得分可以通过比较底层的分数求得。
一般情况下,我们找到的状态表示应能刻划子问题的特征,困难的是如何找到描述
的子问题能满足最优子结构性质的状态表示,而这一点恰恰是决定该问题能否应用
动态规划方法的重要因素。状态表示1-1描述的问题是正确的,但它不能满足最优
子结构性质,使得无法用它来建立动态规划数学模型。状态分析的过程实际上是分
析问题最优子结构的过程,不同的状态表示正是从不同的角度去试图刻划问题的最
优子结构。只有状态表示描述的子问题能满足最优子结构性质,我们才能在此基础
上正确的建立起动态规划数学模型。

问题二 : 在茫茫大海中,有一座荒芜人烟的小岛,它有着肥沃的土地,终年四季
如春。在许多年的沉寂后,移民者终于踏上了这块土地,接下来的事情就是对土地
进行垦荒。小岛呈不规则多边形形状,为了便于管理,移民者决定将小岛划分为三
角形区域且三角形区域的个数要最少,这些三角形区域的顶点必须是小岛的顶点。
 显然, 用来描述小岛的多边形的任两个顶点不重合,任两条边不相交,三角形区
域内只有陆地。
要求输入多边形的顶点数 n和它的顺时针坐标,返回最小区域数和具体的划分方法

例 : 给定如左图所示的小岛, 可有右图所示的两种划分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值