我试着理解矩阵链乘法。特别是问题Given a sequence of matrices, find the most efficient way to multiply these matrices together.
我尝试了以下方法,但它为结果打印了一些无限值。我做错了什么?
const p = [1, 2, 3, 4, 3];
function mcm(m, i, j) {
if (i >= j) return 0;
else {
let ans = Number.MAX_VALUE;
let temp;
for (let k = i; k < j - 1; k++) {
temp = mcm(m, i, k) + mcm(m, k + 1, j) + m[i - 1] * m[k] * m[j];
if (ans > temp) ans = temp;
}
return ans;
}
}
console.log(mcm(p, 1, p.length - 1));
发布于 2021-01-30 12:24:34
该错误处于for
循环的结束状态:
for (let k = i; k < j - 1; k++) {
它应该是:
for (let k = i; k < j; k++) {
原因是j
包含在要检查的范围内,所以k
应该上升到并包含j-1
。
您正在接近无穷大,因为在代码中有些情况下,循环根本不执行迭代(当j-i==1
时),然后函数将返回Number.MAX_VALUE
,这说明了您得到的输出。
https://stackoverflow.com/questions/65966995
复制相似问题