【发布时间】:2021-07-19 15:48:34
【问题描述】:
据我了解,您需要一个问题才能拥有适用于动态编程的最佳子结构。
这是我不明白的。
取如下数组
A = [1, 6, -3, 1, 5, -1]
根据维基百科:
在计算机科学中,如果可以从其子问题的最优解构造出最优解,则称该问题具有最优子结构。此属性用于确定动态规划和贪心算法对问题的有用性。
这就是我的困惑所在。
如果我被要求在上面给出的数组中找到大小为 3 的最大子数组,答案将是 1、5、-1(总和为 5)。
但如果我要找到大小为 2 的最大子数组,答案将是 (1,6),它与前一个答案没有共享元素。
我一定不明白最优子结构的含义,但我不明白如何。
【问题讨论】:
-
贪心算法不一定有最优子结构。
-
关键字是“子问题”。首先设计一个蛮力算法来解决问题。然后分析蛮力算法以确定它是否一遍又一遍地解决相同的子问题。如果是这样,那么该算法是动态规划的候选者。最大子数组问题的蛮力解决方案是一个简单的 O(n) 滑动窗口。而 O(n) 理论上是解决该问题的最佳时间,因此动态规划没有任何好处。
标签: algorithm