复习链接
计算机算法设计与分析第一章思维导图
计算机算法设计与分析第二章思维导图&&知识点总结
计算机算法设计与分析第三章思维导图&&知识点总结
计算机算法设计与分析第四章思维导图&&知识点总结
计算机算法设计与分析第五章思维导图&&知识点总结 ( 初稿 )
计算机算法设计与分析第六章思维导图&&知识点总结 ( 初稿 )
计算机算法设计与分析第七章思维导图&&知识点总结 ( 初稿 )
思维导图

( 注:对应用范例,本文最后一部分给出了部分解释与分析 )
动态规划算法的概念
动态规划是运筹学的一个分支,是求解决决策过程最优化的过程。
动态规划算法与分治法类似,其基本思想是将待求解问题分解成若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题往往不是互相独立的。若用分治法来解决这类问题,则分解得到的子问题数目太多,以致最后解决原问题需要耗费指数级时间。
动态规划算法的基本要素
(1)最优子结构性质
问题的最优解包含了子问题的最优解
(2)重叠子问题性质
子问题空间要比原问题小,且可以用原解原问题的递归算法反复解同样子问题。不同子问题数为输入规模的多项式。当一个递归算法不断遇到相同子问题时称为交叠
设计动态规划算法的步骤
(1)找出最优解的性质,并刻画其结构特征
(2)递归地定义最优值
(3)以自底向上的方式计算最优值
(4)根据计算最优值时得到的信息构造最优解
动态规划算法的主要特征
求解的是多阶段决策问题。求解过程是多步判断,从小到大依次求解每个子问题,最后求解的子问题就是原始问题。子问题目标函数的最值之间存在依赖关系,保存子问题的解以备后用
优化原则
一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优的决策序列。
使用条件
问题满足优化原则或最优子结构性质,这是使用动态规划技术的必要条件
备忘录法
一个动态规划变种
保持与动态规划相同的效率
采用自顶向下的方式
思想:
每个表项初始化为其值将要被填入
当子问题第一次遇到时,解出其解填入相应的表项中
以后再遇到这个子问题,就查表获得其值
应用范例
矩阵连乘问题
状态转移方程:
m [ i ] [ j ] = { 0 , i = j m i n i < = k < j ( m [ i ] [ k ] + m [ k + 1 ] [ j ] + p i − 1 p k p j ) , i < j m[i][j]=\begin{cases} 0, & i=j \\ min_{i<=k<j}(m[i][k]+m[k+1][j]+p_{i-1}p_kp_j), & i<j \end{cases} m[i][j]={ 0,mini<=k<j(m[i][k]+m[k+1][j]+pi−1pkpj),i=ji<j
物理意义:
m [ i ] [ j ] 表 示 计 算 矩 阵 A [ i : j ] 所 需 的 最 小 数 乘 次 数 。 m [ i ] [ j ] 表示计算矩阵 A [ i : j ] 所需的最小数乘次数。 m[i][j]表示计算矩阵A[i:j]所需的最小数乘次数。
最长公共子序列
状态转移方程:
m [ i ] [ j ] = { 0 , i > 0 ; j = 0 m [ i − 1 ] [ j − 1 ] + 1 , i , j > 0 ; x i = y j m a x ( m [ i ] [ j − 1 ] , m [ i − 1 ] [ j ] ) , i , j > 0 ; x i ≠ y j m[i][j]=\begin{cases} 0, & i>0;j=0 \\ m[i-1][j-1]+1, & i,j>0;x_i=y_j \\ max(m[i][j-1],m[i-1][j]), & i,j>0;x_i \neq y_j \end{cases} m[i][j]=⎩⎪⎨⎪⎧0,m[i−1][j−1]+1,max(m[i][j−1],m[i−1][j]),i>0;j=0i,j>0;xi=yji,j>0;xi

本文深入探讨了动态规划算法,包括概念、基本要素、设计步骤,以及在矩阵连乘、最长公共子序列、背包问题等典型问题中的应用。重点讲解了备忘录法和优化策略,以及与分治法的区别。
最低0.47元/天 解锁文章
2397

被折叠的 条评论
为什么被折叠?



