Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 动态规划方法是否需要这两个条件(最优结构和重叠子问题)?_Algorithm_Dynamic - Fatal编程技术网

Algorithm 动态规划方法是否需要这两个条件(最优结构和重叠子问题)?

Algorithm 动态规划方法是否需要这两个条件(最优结构和重叠子问题)?,algorithm,dynamic,Algorithm,Dynamic,DP的每一个问题都有两个属性还是任何一个属性就足够了? 如果这两个条件都是必要的,我在背包问题中看不到最优子结构。首先你需要最优结构,也就是说,问题可以通过解决问题的较小实例(子问题)来解决。然后,如果子问题重叠,这意味着解决不同的子问题涉及到解决一些相同的子问题,那么动态规划可以提供帮助。如果没有重叠的子问题,那么就不需要动态规划 对于具有非负权重的无界背包,让best(m)成为最佳和首先需要优化结构,即通过求解问题的较小实例(子问题)来解决问题。然后,如果子问题重叠,这意味着解决不同的子问题

DP的每一个问题都有两个属性还是任何一个属性就足够了?
如果这两个条件都是必要的,我在背包问题中看不到最优子结构。

首先你需要最优结构,也就是说,问题可以通过解决问题的较小实例(子问题)来解决。然后,如果子问题重叠,这意味着解决不同的子问题涉及到解决一些相同的子问题,那么动态规划可以提供帮助。如果没有重叠的子问题,那么就不需要动态规划


对于具有非负权重的无界背包,让
best(m)
成为最佳和首先需要优化结构,即通过求解问题的较小实例(子问题)来解决问题。然后,如果子问题重叠,这意味着解决不同的子问题涉及到解决一些相同的子问题,那么动态规划可以提供帮助。如果没有重叠的子问题,那么就不需要动态规划


对于非负权重的无界背包,设
best(m)
为最佳和背包具有确定的最优子结构

考虑项目的所有子集,每个项目可以有两种情况:(1)项目包含在最优子集中,(2)不包括在最优集合中。 因此,可以从

n
项中获得的最大值是以下两个值的最大值。 1) 通过
n-1
项目和
W
重量获得的最大值(不包括
n
th项目)。 2)
n
th项的值加上
n-1
项和
W
减去
n
th项(包括
n
th项)的重量得到的最大值


如果
n
th项目的重量大于
W
,则不能包括
n
th项目,并且情况1是唯一的可能性。

背包具有明确的最优子结构

考虑项目的所有子集,每个项目可以有两种情况:(1)项目包含在最优子集中,(2)不包括在最优集合中。 因此,可以从

n
项中获得的最大值是以下两个值的最大值。 1) 通过
n-1
项目和
W
重量获得的最大值(不包括
n
th项目)。 2)
n
th项的值加上
n-1
项和
W
减去
n
th项(包括
n
th项)的重量得到的最大值


如果
n
th项的重量大于
W
,则不能包括
n
th项,情况1是唯一的可能性。

您不认为拥有最佳子结构是DP的充分标准吗?毕竟,DP是关于采取所有可能的组合。如果子问题重叠,记忆会有帮助。我认为记忆只是DP的一部分。你同意吗?检查此链接1)否。如果子问题没有重叠,则不需要DP(和备忘录)。例如,快速排序和合并排序利用最佳结构,但不需要DP。2) 记忆化是实现DP的一种方法,但是你可以通过以有利的顺序攻击子问题来提高性能和减少内存需求,比如最长的通用子序列算法。你不认为拥有最佳的子结构是DP的充分标准吗?毕竟,DP是关于采取所有可能的组合。如果子问题重叠,记忆会有帮助。我认为记忆只是DP的一部分。你同意吗?检查此链接1)否。如果子问题没有重叠,则不需要DP(和备忘录)。例如,快速排序和合并排序利用最佳结构,但不需要DP。2) 记忆化是实现DP的一种方法,但您可以通过以有利的顺序攻击子问题(如最长的通用子序列算法)来提高性能并减少内存需求