正如我们在第 1 组中所讨论的,以下是一个问题的两个主要属性,表明可以使用动态规划解决给定的问题:
1) 重叠子问题
2) 最优子结构
我们已经在集合 1 中讨论了重叠子问题属性。让我们在这里讨论最优子结构属性。
2)最优子结构:如果给定问题的最优解可以通过使用其子问题的最优解来获得,则给定问题具有最优子结构属性。
例如,最短路径问题具有以下最优子结构性质:
如果节点 x 位于从源节点 u 到目标节点 v 的最短路径上,那么从 u 到 v 的最短路径是从 u 到 x 的最短路径和从 x 到 v 的最短路径的组合。 标准的 All Pair Shortest Path 算法像 Floyd-Warshall 和像 Bellman-Ford 这样的负权重边的单源最短路径算法是动态规划的典型例子。
另一方面,最长路径问题没有最优子结构属性。这里的最长路径是指两个节点之间最长的简单路径(无环路径)。考虑以下 CLRS 书中给出的未加权图。从 q 到 t 有两条最长的路径:q→r→t 和 q→s→t。与最短路径不同,这些最长路径不具有最优子结构属性。例如,最长路径 q→r→t 不是从 q 到 r 的最长路径和从 r 到 t 的最长路径的组合,因为从 q 到 r 的最长路径是 q→s→t→r 和最长路径从 r 到 t 是 r→q→s→t。
我们将在以后关于动态规划的帖子中介绍一些示例问题。
参考:
http://en.wikipedia.org/wiki/Optimal_substructure
CLRS书
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。