动态编程:子问题图不是非循环图的情况?

时间:2017-06-29 04:10:00

标签: algorithm dynamic-programming graph-theory graph-algorithm

在动态规划中,子问题图被认为是有向非循环图(dag),但是当子问题图包含一个循环时如何解决?例如,子问题(a)的解决方案取决于子问题(b)子问题(c)的解决方案,再次解决子问题(b)取决于子问题的解决方案(a)...

2 个答案:

答案 0 :(得分:0)

在目前的形式中,这个问题只是无法解决。如果不解决A,则无法解决B,反之亦然。 你有更具体的问题吗?也许你的分析错了,子问题不是循环的。

也许您可以拆分子问题,这样就可以解决critical step解析循环依赖关系而不dynamic programming

答案 1 :(得分:0)

在某些情况下(恰好当函数的值彼此线性相关时),您可以减少解决线性方程组的问题。例如,如果您知道

       a   b   c    value
eq.1   1  -1  -1      0
eq.2   0   1  -2      5
eq.3  -1   0   1     -1

然后你可以制作一个看起来像矩阵的线性系统。在这种情况下,它将是

GridLayout.LayoutParams parem = new LayoutParams(GridLayout.spec(GridLayout.UNDEFINED, 1f),  GridLayout.spec(GridLayout.UNDEFINED, 1f));

所以,你有一个矩阵A和一个向量 c ,你想找到这样的 x ,A x = ç即可。矢量 x 将按顺序包含变量的值。这可以使用标准线性代数算法来完成,可能是高斯变换。