说明:这个代码是在《学习javascript数据结构与算法》一书中看到的。关于这本书,数据结构的部分个人感觉并不算好,每个部分都是浅尝辄止。后面章节介绍的一些算法模式及案例倒是不错,还附带说明。
在这里分享一下自己关于背包问题算法的解读。
话不多说,上代码。注释说明了我的理解,如有错误欢迎指正。
/**
*背包问题算法及个人理解
*
* @param {*} weightLimit 背包重量限制
* @param {*} weightArray 物品重量组成的数组
* @param {*} valueArray 物品价值组成的数组。注意顺序要与重量数组对应
* @param {*} account 物品种类(number类型)
*/
function knapSack(weightLimit, weightArray, valueArray, account) {
//ks是保存数据的二维数组,可以看做是矩阵
//初始化一个长度为account+1的二维空数组,每一个子数组都可以看成是选用多少个物品时的情况。
let ks = [];
for (let i = 0; i <= account; i++) {
ks.push([]);
}
//对应的,每一列都是对应重量限制时的物品组合
//即,i行w列的值,对应的是选了前i个物品时,重量限制为w时的最优解
for (let i = 0; i <= account; i++) {
for (let w = 0; w <= weightLimit; w++) {
//重量限制为0,或者选用0个物品组合,结果都为0