mathball
Version:
A JavaScript library for Competitive Programming
40 lines (34 loc) • 1.01 kB
JavaScript
;
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
/*Matrix Chain Multiplication
*Function: M.matrixChain([])
*/
var validate = require('../validation/integer-array');
var matrixChain = function matrixChain(ar) {
var n = ar.length;
var m = [].concat(_toConsumableArray(Array(n))).map(function (x) {
return Array(n).fill(0);
});
var cost = void 0,
j = void 0;
for (var i = 0; i < n; i++) {
m[i][i] = 0;
}
for (var l = 2; l < n; l++) {
for (var _i = 1; _i < n - l + 1; _i++) {
j = _i + l - 1;
m[_i][j] = Number.MAX_SAFE_INTEGER;
for (var k = _i; k <= j - 1; k++) {
cost = m[_i][k] + m[k + 1][j] + ar[_i - 1] * ar[k] * ar[j];
if (cost < m[_i][j]) {
m[_i][j] = cost;
}
}
}
}
return m[1][n - 1];
};
exports.matrixChain = function (arr) {
validate(arr, 'matrixChain');
return matrixChain(arr);
};