第三章动态规划法_new
- 格式:ppt
- 大小:2.17 MB
- 文档页数:68
第三章:动态规划3.1 动态规划的基本概念一、动态决策问题:决策过程具有阶段性和时序性(与时间有关)的决策问题。
即决策过程可划分为明显的阶段。
二、什么叫动态规划(D.P.–Dynamic Program):多阶段决策问题最优化的一种方法。
广泛应用于工业技术、生产管理、企业管理、经济、军事等领域。
三、动态规划(D.P.)的起源:1951年,(美)数学家R.Bellman等提出最优化原理,从而建立动态规划,名著《动态规划》于1957年出版。
四、动态决策问题分类:1、按数据给出的形式分为:•离散型动态决策问题。
•连续型动态决策问题。
2、按决策过程演变的性质分为:•确定型动态决策问题。
•随机型动态决策问题。
五1、阶段(stage)n :作出决策的若干轮次。
n = 1、2、3、4、5。
2、状态(state)S n :每一阶段的出发位置。
构成状态集,记为S nS 1={A},S 2={B 1,B 2,B 3},S 3={C 1,C 2,C 3},S 4={D 1,D 2,D 3},S 5={E 1,E 2}。
阶段的起点。
3、决策(decision)X n :从一个阶段某状态演变到下一个阶段某状态的选择。
构成决策集,记为D n (S n )。
阶段的终点。
D 1(S 1)={X 1(A)}={B 1,B 2,B 3}= S 2,D 2(S 2)={X 2(B 1),X 2(B 2),X 2(B 3)}={C 1,C 2,C 3}=S 3,D 3(S 3)={X 3(C 1),X 3(C 2),X 3(C 3)}={D 1,D 2,D 3}=S 4,D 4(S 4)={X 4(D 1),X 4(D 2),X 4(D 3)}={E 1,E 2}=S 5D 5(S 5)={X 5(E 1),X 5(E 2)}={F;F}={F}。
4、策略(policy):全过程中各个阶段的决策Xn 组成的有序总体{Xn }。
如 A àB2àC1àD1àE2àF5、子策略(sub-policy):剩下的n个阶段构成n子过程,相应的决策系列叫n子策略。
动态规划法动态规划法(Dynamic Programming)是一种常用的算法思想,主要用于解决具有重叠子问题性质和最优子结构性质的问题。
动态规划法通过把问题分解为更小的子问题,并将子问题的解存储起来,以避免重复计算,从而提高了算法的效率。
动态规划法有两个核心概念:状态和状态转移方程。
在动态规划过程中,我们需要定义状态,即问题的子问题解,以及状态之间的关系,即状态转移方程。
动态规划法的一般步骤如下:1. 定义问题的子问题:将问题划分为更小的子问题,并明确子问题的解是什么。
2. 定义状态:将问题的子问题解抽象为状态,即用一个变量或者数组表示子问题的解。
3. 定义状态转移方程:根据子问题的关系,定义状态之间的转移方程,即如何根据已知的子问题解计算出更大的问题的解。
4. 缓存子问题解:为了避免重复计算,我们需要将已经计算过的子问题解存储起来,以便后续使用。
5. 递推计算:通过状态转移方程和缓存的子问题解,逐步计算出更大的问题的解,直到计算出最终的问题解。
动态规划法的关键在于找到正确的状态转移方程和合理的存储子问题解的方式。
有些问题的状态转移方程比较容易找到,比如斐波那契数列,每个数都是前两个数的和;而有些问题的状态转移方程可能比较复杂,需要通过观察问题的特点和具体分析来确定。
动态规划法的时间复杂度通常为O(n),其中n 表示问题规模。
由于利用了子问题的解,避免了重复计算,因此动态规划法相对于暴力求解法能够大大提高算法的效率。
但是,动态规划法的空间复杂度通常较高,需要存储大量的子问题解,因此在实际应用中需要权衡时间和空间的消耗。
总的来说,动态规划法是一种非常灵活且强大的算法思想,能够解决许多复杂的问题,特别适用于具有重叠子问题性质和最优子结构性质的问题。
通过正确定义状态和状态转移方程,并结合缓存子问题解和递推计算,我们可以高效地求解这类问题,提高算法的效率。
动态规划算法的实施步骤1. 算法介绍动态规划是一种常用的求解最优化问题的方法,它适用于求解具有重叠子问题特性的问题。
动态规划算法通过将问题拆分成小问题,并保存这些小问题的解来减少重复计算,从而提高求解效率。
2. 实施步骤步骤一:定义问题的状态在动态规划算法中,第一步是定义问题的状态。
问题的状态是指问题的子问题中需要求解的变量或指标。
这些状态一般可以用一个或多个变量来表示。
步骤二:确定状态转移方程确定状态转移方程是动态规划算法的核心步骤。
状态转移方程可以根据问题的特点和定义的状态来确定。
状态转移方程描述了问题的当前状态和下一个状态之间的关系。
步骤三:确定初始状态初始状态是指问题的最小规模的子问题的解,也就是边界条件。
初始状态的确定需要根据具体问题来定义。
步骤四:计算最优解根据定义的状态转移方程和初始状态,可以通过自底向上(bottom-up)或自顶向下(top-down)的方式,计算出问题的最优解。
步骤五:返回最优解最后一步是返回计算得到的最优解。
根据问题的特点和需求,最优解可以是一个值,也可以是一组值。
3. 实施示例为了更好地理解动态规划算法的实施步骤,下面以求解斐波那契数列为例进行说明。
步骤一:定义问题的状态在求解斐波那契数列的问题中,状态可以定义为第n个斐波那契数F(n)。
步骤二:确定状态转移方程斐波那契数列的状态转移方程为F(n) = F(n-1) + F(n-2)。
步骤三:确定初始状态斐波那契数列的初始状态可以定义为F(0) = 0,F(1) = 1。
步骤四:计算最优解根据状态转移方程和初始状态,可以通过自底向上的方式计算斐波那契数列的最优解。
def fibonacci(n):if n ==0:return0elif n ==1:return1else:dp = [0] * (n+1)dp[0] =0dp[1] =1for i in range(2, n+1):dp[i] = dp[i-1] + dp[i-2]return dp[n]步骤五:返回最优解在上述示例中,最优解为fibonacci(n),即第n个斐波那契数。
《高级算法与数据结构》课程思政元素第三章动态规划3.1 动态规划算法的基本原理一、授课内容1.1 动态规划算法的基本思想在现实生活中,有一类问题被定义为最优决策问题,这类问题可能会有许多可行解,每一个解都对应于一个值,我们希望找到具有最优值的那个解,即最优解。
20世纪40年代,Richard Bellman首次使用了动态规划这个术语,用来描述最优决策问题的求解过程。
其核心思想是将最优决策问题按照时间或空间特征分解成若干相互关联的阶段,以便按次序去求每个阶段的解。
各阶段开始时具有客观条件(称之为状态),当各阶段的状态确定以后,就可以做出不同的决定,从而确定下一阶段的状态,这种决定称为决策。
“动态”是指在一定条件下,根据上一阶段的状态和决策来导出本阶段的状态,“规划”是指建立状态转移方程。
最优决策问题的难点在于,各个阶段决策的选取不能任意确定,它既依赖于当前面临的状态,又影响着以后的发展。
1.2 动态规划算法与分治法的区别和联系动态规划算法与(第二章)分治法类似,都是将待求解问题分解为若干个子问题,先求解子问题,再结合这些子问题的解得到原问题的解。
与分治法不同之处在于:(1)适合用动态规划求解的问题经分解得到的子问题往往不是相互独立的(即重叠子问题),在递归模型上采用分治法自顶向下求解时,有些子问题被反复计算。
动态规划算法正是利用重叠子问题的性质,将各阶段子问题的最优值保存在一个表格中,在需要时以常数时间查看结果,这样可以避免大量的重复计算。
对于一些在递归模型上具有指数下界的算法来说,当不同子问题的个数随问题的大小呈多项式增长时,用动态规划的表格式方法来存储重叠子问题的解,可以将指数时间减少为多项式时间,从而有效降低了时间复杂度。
(2)每个阶段的子问题可能会有许多可行解,当问题的最优解包含了其子问题的最优解时(即最优子结构),表格里只存储子问题的最优解就可以了。
利用最优子结构性质,动态规划可以自底向上的从子问题的最优解逐步构造出原问题的最优解,从而有效控制了空间复杂度。