矩阵链乘法动态规划

时间:2018-05-31 13:15:50

标签: algorithm dynamic-programming

假设将维度p×q的矩阵G1与维度q×r的另一矩阵G2相乘,需要pqr标量乘法。计算n个矩阵G1G2G3 ...... Gn的乘积可以通过以不同方式括号来完成。如果直接相乘,则将GiGi + 1定义为给定paranthesization的显式计算对。例如,在矩阵乘法链G1G2G3G4G5G6中使用括号(G1(G2G3))(G4(G5G6)),G2G3和G5G6只是显式计算对。

考虑矩阵乘法链F1F2F3F4F5,其中矩阵F1,F2,F3,F4和F5的尺寸分别为2×25,25×3,3×16,16×1和1×1000。在最小化标量乘法总数的F1F2F3F4F5的括号中,显式计算的对是

仅限F1F2和F3F4

仅限F2F3

仅限F3F4

仅限F2F3和F4F5

=============================================== ========================

我的方法 - 我想在一分钟内解决这个问题,但我知道的唯一方法是通过制作一个表来使用自下而上的动态方法,而我可以得出的另一个结论是我们应该在F5处乘以F5最后因为它有1000个尺寸。那么,请问如何为这类问题发展快速直觉!

=============================================== =======================

正确答案是F3F4

1 个答案:

答案 0 :(得分:1)

最重要的是维度 1×1000 。如果你想最小化乘法,你最好注意它。好的,现在我们确实知道我们要找的是基本上用 1000 来增加一个小数字。

仔细检查我们是否选择 F4F5 ,我们将乘以 16x1x1000 。但是计算 F3F4 第一,结果矩阵的维度为 3x1 。因此,使用 F3F4 ,我们可以得到像 3,1 这样的小数字。所以,我不能选择 F4F5

按照类似的逻辑,我不会选择 F2F3 并且松散较小的3并且变大 25 16 稍后将与 1000 一起使用。

确定,对于 F1F2 ,您可以快速找到(F1F2)(F3F4)并不是更好比 (F1(F2(F3F4)))。所以答案是 F3F4