js解背包问题(附个人理解)

说明:这个代码是在《学习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
   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值