动态规划方法是否都需要条件(最佳结构和重叠子问题)?

时间:2016-11-17 12:54:22

标签: algorithm dynamic

DP的每个问题都拥有财产或任何单一财产是否足够? 如果两个条件都是必要的,我在背包问题中看不到最佳子结构。

2 个答案:

答案 0 :(得分:0)

首先,您需要最佳结构,即通过解决较小的问题实例(子问题)可以解决问题。然后,如果子问题重叠,意味着解决不同的子问题涉及解决一些相同的子子问题,那么动态编程可以提供帮助。如果没有重叠的子问题,则动态编程是不必要的。

对于非负重量的无界背包,让best(m)为最佳总和< = m。如果best(m) != 0,那么best(m) = best(m-w[i]) + w[i]代表一些权重w[i]

best(m-w[i])是一个子问题。如果你能解决所有这些问题,那么解决best(m)很容易,因此背包具有最佳结构。

此外,解决best(m-w[i])best(m-w[j])都需要解决best(m-w[i]-w[j]),这首先与best(m-w[j]-w[i])相同,因此背包会出现重叠的子问题。

答案 1 :(得分:0)

背包具有明确的最佳子结构。

要考虑项目的所有子集,每个项目可以有两种情况:(1)项目包含在最佳子集中,(2)不包括在最优集合中。 因此,可以从n项获得的最大值是以下两个值的最大值。 1)n-1项和W权重(不包括n项)获得的最大值。 2)n项的值加上n-1项获得的最大值和W减去n项(包括n项的权重)。

如果n项的权重大于W,则无法包含n项,而案例1是唯一的可能性。