经过在网上的搜索,我发现一般情况下最优子结构的说法是:“如果一个问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构”
此前,我将之理解为一个问题的最优解可以划分成几个子问题的解的组合,且这几个子问题的解都是子问题的最优解,如n到m的最短路径由nl和lm组成,nl是n到l的最短路径,lm是l到m的最短路径;又或者说把一个问题的最优解缩小规模(即取子集),就能得到一个子问题的最优解。
而今我重新复习动态规划,发现以前的理解不适用于有的问题,比如斐波那契数列,状态转移方程为
那么f(n)很难理解成“包含子问题的最优解”的解,还有只交易一次的股票问题,状态转移方程为
其中f(n)为前n天的最大利润,g(n)为第n天股票的价格,min_list(n)为前n天股票价格的最小值,这里的f(n)也难以理解成“包含子问题的最优解”的解。以上的解都是最优解,也是由子问题的最优解推导而来,但是单看解f(n)难以划分出子问题的最优解
所以我现在把最优子结构理解成“对于可转化为经过多步决策可确定其解的问题,若其最优解对应的决策序列的子序列所确定的状态,是该问题的子问题的最优解,那么问题具有最优子结构”
或“如果我们可以通过逐步扩大子问题规模,并求解子问题最优解的方式,最终求得问题的最优解,那么问题具有最优子结构”
PS:我认为子问题是形式与问题相似但规模缩小的问题
希望大家觉得有问题轻点🐎