void martixchain(int *p, int n, int **m, int **s)
{
for (int i = 1; i <= n; i++) //m[i][j]表示A[i:j]所需要的最小数乘次数,自己乘自己为0
m[i][i] = 0;
for (int r = 1; r <= n; r++) //控制i和j的距离
{
for (int i = 1; i <=n-r:i++ )
j = i + r; //注意不要让j的访问过界
m[i][j] = m[i + 1][j] + p[i - 1] * p[i] * p[j]; //先给m[i][j]赋一个值
s[i][j] = i; //s[i][j]记录断点位置
for (int k = i + 1; k < j; k++)
{
int 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;
}
}
}
}
矩阵连乘 动态规划
最新推荐文章于 2024-09-15 12:30:57 发布
该博客详细解析了矩阵链乘法的动态规划算法实现,通过二维数组m[i][j]记录A[i:j]的最小子乘次数,并利用辅助数组s[i][j]记录最优分割点,有效地减少了计算过程中的乘法操作。动态规划方法优化了计算效率,避免了不必要的计算。
摘要由CSDN通过智能技术生成