algorithm - 为什么我们在矩阵链乘法中使用三个循环?

标签 algorithm for-loop matrix dynamic-programming

我正在学习动态规划。我被困在这个问题上 Matrix Chain Multiplication。我理解三个循环的需要。但是如何想出这些安排,如 j = i+L-1 和 i 的测试条件。 还有其他一些具有类似解决方案的 DP 问题,我注意到这些循环仅用于填充上三角矩阵。我想知道为什么我们要这样写循环?

for (int L=2; L<n; L++){
    for (int i=1; i<n-L+1; i++)
    {
        int j = i+L-1; // Why ?
        m[i][j] = INT_MAX;
        for (int k=i; k<=j-1; k++)
        {
            int q = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
            if (q < m[i][j])
            {
                m[i][j] = q;
            bracket[i][j] = k;
            }
        }
    }
}

最佳答案

L 是 Chain 的长度。 我是行号。 j 是列号。 k是中间乘法。

关于algorithm - 为什么我们在矩阵链乘法中使用三个循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50434265/

相关文章:

python - 如何从字符串形成字典?

c - 查找二维矩阵中的最大值(递归)

javascript - 行列式函数中的 NaN?

c - 在 C 中用键盘打破 FOR 循环

python - 仅使用数字运算,无需列表或字符串,从数字中删除偶数位

java - 在循环的限定比较中使用随机参数时,它是调用一次随机化函数还是每次循环运行时调用?

matlab - mat2cell 输入参数错误

python - 交织 3 个 numpy 矩阵?

c++ - map 的插入排序

用于在图中查找人脸的 Java 算法