设有四个矩阵 A、B、C、D ,它们的维数分别是:A=50*10 B=10*40 c=40*30 D=30*5
总共有五中完全加括号的方式

由此可知我们直接穷举是不行的,复杂度是取决于维数的规模,现在我们可以知道 我们要的是找到其中维数乘积最小的两个,这里我们可以用普通的思维 找乘积最小的。也就是 找子问题最小的,这里我们可以看到最小的是
CD 再是B(CD)
这也正好符合动态规划的思想 将待解决的问题分解成诺干个子问题,先求子问题,然后从这些子问题的解 递归 得到原问题的解。
与分治不同的是,适合于动态规划求解的问题,经分解得到的子问题往往不是相互独立的。诺用分治来解决这类问题,则分解得到的子问题太多,以至于最后解决原问题时间需要耗指数级时间。

文章探讨了如何找到四个矩阵A、B、C、D之间完全加括号的五种方式中,使维数乘积最小的路径。通过动态规划思想,将问题分解为找乘积最小的子问题,例如CD和B(CD)。状态方程表示为min { m[i][k] + m[k+1][j] + p[i-1] * p[i] * p[k]},适用于解决不独立的子问题,而不是分治法。虽然未提供测试代码,但读者可以尝试使用提供的思路实现。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



