动态规划-算法设计

动态规划

动态规划算法的概念

动态规划和分治法类似,基本思想将待求解的问题分解成若干子问题,先求解子问题,然后结合子问题的解得到原问题的解。与分治法不同的是适合动态规划法求解的问题经过分解得到的子问题往往不是相互独立的

动态规划算法的基本要素

最优子结构性质

设计动态规划算法时第一步通常是要刻画最优解的结构。当问题的最优解包含子问题的最优解时,称该问题有最优子结构性质。

在动态规划算法中,利用问题的最优子结构性质,以至底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。

重叠子结构问题性质

可用动态规划算法求解的问题应具备的另一基本要素是子问题的重叠性质,在使用递归算法自顶向下解此问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算。动态规划算法就是利用这种子问题的重叠性质,对每个子问题只求解,然后将其保存在一个表格中,当再次需要解此子问题时,只要简单地用常数时间查看一下结果。

备忘录方法(变形)

备忘录方法是动态规划算法的变形。与动态规划算法一样,备忘录方法是用表格保存已解子问题的答案,在下次需要解决此子问题时只要简单查看该子问题的解答而无需再新的计算。
与动态规划算法不同是备忘录方法的递归方式是自顶向下的,而动态规划算法是自底向上递归的。所以备忘录方法的控制结构与直接递归算法的控制结构相同,区别在于备忘方法为每个解过的子问题建立了备忘录以备需要时查看,避免相同的子问题的重复求解。

求解流程,备忘录方法为每个子问题建立一个记录项,初始化时,该记录项存入一个特殊的值,表示该子问题尚未求解。在求解过程中,对每个待求解的子问题,首先查看其相应的记录项。若记录项中存储的是初始化的存入的特殊值,则表示该子问题是第一次遇到,此时计算出该子问题的解,并保存在对应的记录中,以备以后查看。若记录项中存储的不是初始化时存入的特殊值,则表示该子问题已经被计算过,其相应的记录项中存储的是该子问题的解答。此时,只要从记录项中取出子问题的解答即可,而不必重新计算。

设计动态规划算法的步骤

(1)找出最优解的性质,并刻画其结构特性。

(2)递归地定义最优值。

(3)以自底向上的方式计算最优值

(4)根据计算最优值时得到的信息,构建最优解。

你可能感兴趣的:(算法,1024程序员节,算法,动态规划)