试题详情
- 简答题简述动态规划算法的基本步骤。
-
设计一个标准的动态规划算法,通常可按以下几个步骤进行:
(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。注意这若干个阶段一定要是有序的或者是可排序的(即无后向性),否则问题就无法用动态规划求解。
(2)选择状态:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。
(3)确定决策并写出状态转移方程:之所以把这两步放在一起,是因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以,如果我们确定了决策,状态转移方程也就写出来了。但事实上,我们常常是反过来做,根据相邻两段的各状态之间的关系来确定决策。
(4)写出规划方程(包括边界条件):动态规划的基本方程是规划方程的通用形式化表达式。
一般说来,只要阶段、状态、决策和状态转移确定了,这一步还是比较简单的。动态规划的主要难点在于理论上的设计,一旦设计完成,实现部分就会非常简单。根据动态规划的基本方程可以直接递归计算最优值,但是一般将其改为递推计算。实际应用当中经常不显式地按照上面步骤设计动态规划,而是按以下几个步骤进行:
(1)分析最优解的性质,并刻划其结构特征。
(2)递归地定义最优值。
(3)以自底向上的方式或自顶向下的记忆化方法(备忘录法)计算出最优值。
(4)根据计算最优值时得到的信息,构造一个最优解。
步骤(1)~(3)是动态规划算法的基本步骤。在只需要求出最优值的情形,步骤(4)可以省略,若需要求出问题的一个最优解,则必须执行步骤(4)。此时,在步骤(3)中计算最优值时,通常需记录更多的信息,以便在步骤(4)中,根据所记录的信息,快速地构造出一个最优解。
总结:动态规划实际上就是最优化的问题,是指将原问题的大实例等价于同一最优化问题的较小实例,自底向上的求解最小实例,并将所求解存放起来,存放的结果就是为了准备数据。与递归相比,递归是不断的调用子程序求解,是自顶向下的调用和求解。 关注下方微信公众号,在线模考后查看
热门试题
- 关于跳转语句continuebreak常
- 最优子结构性质的含义是()。
- 下列不是动态规划算法基本要素的是()。
- 采用快速排序进行排序,问题规模为n,则时
- C语言中,数组是具有不相同数据类型的有序
- 对布线问题,以下()是不正确描述。
- 已知序列X={x1
- 在C语言中,strcat(字符数组,字符
- 以下能正确定义数组并赋初值正确的语句是:
- 分支限界法主要有()分支限界法和()分支
- 静态查找与动态查找并没有什么区别。
- 图的m着色问题可用()法求解,其解空间树
- 两个整数的最小公倍数的求解一般以先求出它
- 数据结构与算法里,while循环属于当型
- 数据结构与算法里,排序是()
- 修公路问题算法:则填空处可以填写()
- 分支限界法解最大团问题时,活结点表的组织
- 数据结构中,下列选项中是折半查找的时间复
- 打印1-10000以内的所有完数,这个算
- 简述数值概率算法的作用。