标签:
根据计算最优值时得到的信息,构造最优解
下面用一个例子来说明。
矩阵连乘问题(自行百度查一下是什么哈)
——问题的最优解包含了其子问题的最优解,这种性质称为最优子结构性质。
最优解:A[1:6]=A[1:3]+A[4:6]+A[1:3]*A[4:6]
——则原问题的最优解为m[1][n]
m[i][j] = 0+m[i+1][j]+ p[i-1]*p[i]*p[j];
for (k = i+1; k < j; k++) {
t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
if (t < m[i][j]) m[i][j] = t;
}
void MatrixChain(int *p,int n,int **m,int **s) { for (j = 2; j <= n; j++) for (i = j-1; i >= 1; i--) { m[i][j] = m[i+1][j]+ p[i-1]*p[i]*p[j]; s[i][j] = i; for (k = i+1; k < j; k++) { t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j]; if (t < m[i][j]) { m[i][j] = t; s[i][j] = k; } } } } //算法的计算时间上界为O(n3)
标签:
原文地址:http://www.cnblogs.com/Tritone/p/4557686.html