动态规划算法应用范围的两个限制

在看  “《算法导论》15.3动态规划原理--最优子结构通用模式”  时,感觉第四步的证明有问题,这里来分析一下,欢迎吐槽。

 ----------------------------------------------------------------------------------------

 4. 证明:作为构成原问题最优解S的组成部分,每个子问题的解都是它自身的最优解。


使用反证法:
①假定 S是原问题 P的一个最优解,假定构成S的一个子问题 pi 的解 si,不是其自身的最优解,那么设 pi 的最优解为 si'。
②那么我们就可以从原问题的解S中“剪掉” pi 非最优解 si,将最优解 si' “粘贴”上去,从而得到原问题的一个更优的解 S'。
③这与S 是原问题的一个最优解矛盾。
命题得证。

(注:为了便于讨论,对书中给出的证明做了修改:将“子问题”修改“一个子问题”,并添加了符号。)

----------------------------------------------------------------------------------------

让我们来看看第②步推理使用的逻辑:

如果 pi的解 si' 与 si相比是一个更优的解,那么使用 si'在S中替换 si,即得一个比 S的更优的解 S'。

这并未说明其它子问题的解的变化情况,首先假设其它子问题的解均不变:

那么这样的逻辑隐含的假设是:S与 si 正相关。这没有根据。

然后我们假设构成S的其他子问题的解也均被替换为这些子问题更优的解:

那么这样的逻辑隐含的另一个假设就很明白了:

构成原问题的解的各个子问题的解之间,不存在负的相互作用(要么互不影响,要么正相关)。

这也是没有根据的。

 

----------------------------------------------------------------------------------------

由此,也弄清楚了的动态规划算法使用范围的两个限制:

①构成原问题解的子问题的解,与该原问题的解 正相关;

②构成原问题解的各个子问题的解之间,要么互不影响,要么正相关。

(一页之后书中给出了弱版本的说明)

当然如果只是将动态规划算法用于现实中数值非负的、系数为正的线性的问题中,是不会超出这两个限制的。

原文地址:https://www.cnblogs.com/xiashu/p/3493679.html