矩阵连乘问题
输入:<A1,A 2,…,An>, Ai是矩阵
输出:计算A1 A2 … An的最小代价方法
若A是p *q矩阵,B是q *r矩阵,则A *B的代价是O(pqr)
-
如何用子问题表示
dp[ i ][ j ]表示从 Ai 乘到 Aj 的最小代价方法
总问题表示为dp[ 1 ][ n ] -
优化子结构和重叠子问题
-
递归方程式
dp[ i ][ j ] = min{ dp[ i ][ k ] + dp[ k+1 ][ j ] + w(Vi-1 Vk Vj)}
w(Vi-1 Vk Vj)指矩阵Ai~k * Ak+1~j的代价
递归终点:dp[ i ][ i ] = 0; -
伪代码
Maxtrix_chain_order(p):
n = length(p) - 1;
for i = 1 to n do:
m[i,j] = 0;
for l = 2 to n do ://对角线
for i = 1 to n-l+1 do:
j = i + l - 1;
m[i,j] = 100000;
for k = i to j do:
q = m[i,k] + m[k+1,j] + p(i-1)p(k)p(j);
if q < m[i,j]
m[i,j] = q;
return m;
5.时间复杂度分析:O(n^3)
6.拓展:多边形的三角形剖分问题