在探索了这个question之后,我开始意识到动态编程算法不能用于解决knapsack problem或非整数约束的类似问题。我对自己的认识是对的吗?动态编程算法还有其他限制吗?
答案 0 :(得分:2)
基本上你可以说可能的分数(解决方案质量)需要有限且足够低以适应内存。非整数通常意味着非离散,并导致无限可能的解决方案得分。
如果只有N个可能的解决方案得分,你知道你最多需要找到N个才能得到最好的解决方案得分,而不是整个指数的方法来获得它们。这就是动态编程背后的理念。
答案 1 :(得分:1)
我认为另一个限制是,不知道动态编程是否是最好的可用技术,因为它的性能不知道是否与信息理论下界相匹配。
以下是an example problem from David Eppstein:
给定n个实数的排序列表,找到最小的间隔 包含正好k个元素,对于1和n之间的所有k值。 有一种简单的动态编程算法可以解决这个问题 二次时间的问题,但最着名的下限是 线性的。要么描述更快的算法,要么证明更低的算法 绑定在一些合理的计算模型中。 (“动态编程” 不是一个合理的计算模型!!)