在基础部分,我们介绍了动态规划法的两个重点和实现动态规划法的四个步骤,在第 4 部分动态规划中,我们将介绍一系列动态规划类的算法例子,这些例子覆盖一维动态规划、串模型的动态规划、区间模型动态规划以及状态压缩类型的动态规划,但是在开始之前,先通过几个简单的例子,帮助大家进一步理解动态规划。
如何理解动态规划
动态规划法中有几个概念比较抽象,一个是重叠子问题,一个是最优子结构,还有一个是子问题的无后向性(无后效性)。这几个概念不是独立的,它们之间是相互联系的,首先说说重叠子问题。千万不要望文生义,这里重叠的意思不是子问题之间互相有重叠的部分,是指一个问题的子问题可以被重复使用,每个决策阶段的子问题的状态(子问题的解),可由其他已经决策过的子问题(已经求解过的子问题)的状态通过某种关系决策(堆叠)后得到,而不是必须引入新的子问题才能解决。一旦某个阶段的子问题的状态需要引入新的子问题而不是用已经决策过的,并且确定了状态的子问题才能解决,说明子问题不满足无后向性。所谓的无后向性,是指子问题在某个阶段的状态一旦确定,其后续的状态变迁都是一样的,不会因为之前到达这个状态的路径或方式不同而变化。
怎么理解呢,举个例子,假如子问题在某个阶段的状态确定后,其后续经过若干个决策阶段后可以得到一个最优解,那么不管之前通过何种决策路经,只要在搜索过程中达到这个公共状态,就可以得到最优解,这个结果不会再改变,因此可以记录下来,其他阶段的决策可以直接用状态值表达,不需要再重复计算其后续各个阶段的子问题的状态值。一个问题的最优解可以从其子问题的最优解中得到,那么我们称这个问题具有最优子结构。最优子结构并不是动态规划法独有的要求,很多求解最优化问题的算法都要求子问题的划分满足最优子结构的要求
本文深入解析动态规划法,通过上楼梯问题介绍动态规划的核心概念,如重叠子问题、最优子结构和无后向性。探讨了动态规划的递推关系式和常见模式,帮助读者理解并应用动态规划解决问题。
订阅专栏 解锁全文
960

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



