使用动态规划进行矩阵乘法的子问题图

时间:2015-09-15 10:43:04

标签: algorithm dynamic-programming

我正在阅读关于cormen中的动态编程。

相关的背景可以在以下链接中找到

http://staff.ustc.edu.cn/~csli/graduate/algorithms/book6/chap16.htm

通常,子问题图提供了另一种执行动态编程运行时分析的方法。 每个顶点对应一个子问题,子问题的选择是从该子问题入射的边。回想一下,在棒切割中,子问题图有n个顶点,每个顶点最多有n个边,产生一个 O(n ^ 2)运行时间。对于矩阵链乘法,如果我们绘制子问题图,它将具有O(n ^ 2)个顶点,并且每个顶点将具有最多n-1度,给出总共O(n ^ 3)个顶点和边缘

我正在寻找矩阵链乘法子问题图,例如n = 4。

感谢您的时间和帮助

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的问题,但是你在找这样的东西吗?

subproblem graph

我使用这个简单的Python脚本创建它:

n = 4
print 'digraph {'
for i in range(n):
    for j in range(i, n):
        print 'p{}{} [label="M[{},{}]"];'.format(i,j,i+1,j+1)

for i in range(n):
    for j in range(n):
        for k in range(i, j):
            print 'p{}{} -> p{}{}'.format(i,j,i,k)
            print 'p{}{} -> p{}{}'.format(i,j,k+1,j)
print '}'

像这样运行(需要安装graphviz和imagemagick):

python test.py | dot -Tpng | display