UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

40 lines (34 loc) 1.01 kB
'use strict'; 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); };