我的背包DP解决方案的javascript实现是否正确地利用了记忆表?

我的背包DP解决方案的javascript实现是否正确地利用了记忆表?,javascript,dynamic-programming,memoization,knapsack-problem,Javascript,Dynamic Programming,Memoization,Knapsack Problem,这是我针对背包问题的javascript实现。在这个问题中,您将得到一个具有权重和值的项目列表,以及一个具有权重容量的背包。目的是确定如何在不超过背包重量的情况下最大化背包中物品的价值。下面我的函数采用两个参数,items(item对象数组,每个对象包含一个weight和value字段,以及一个表示背包重量容量的capacity整数。我使用一个memo表,其中存储了每个index:weight以供重复访问,以避免重复计算getMax().我的实施是否良好?是否可以改进 功能背包MaxValue(

这是我针对背包问题的javascript实现。在这个问题中,您将得到一个具有权重和值的项目列表,以及一个具有权重容量的背包。目的是确定如何在不超过背包重量的情况下最大化背包中物品的价值。下面我的函数采用两个参数,items(item对象数组,每个对象包含一个weight和value字段,以及一个表示背包重量容量的capacity整数。我使用一个memo表,其中存储了每个index:weight以供重复访问,以避免重复计算getMax().我的实施是否良好?是否可以改进

功能背包MaxValue(物品、容量){
常量memo={}
函数getMax(i,重量){
if(i==items.length){
返回0;
}
如果(备注[i+':'+重量]!=未定义){
console.log('找到备忘录')
退货通知单[i+':'+重量]
}
if(项目[i]。重量+重量>容量){
备注[i+':'+重量]=getMax(i+1,重量)
退货通知单[i+':'+重量]
}否则{
设maxValue=Math.max(getMax(i+1,权重),items[i].value+getMax(i+1,权重+items[i].weight))
备注[i+':'+重量]=最大值
返回最大值
}
}
返回getMax(0,0)
}

请访问帮助中心,了解询问的内容和方式。这个问题可能更适合codereview。如果代码显然产生了正确的结果,那么在codereview中询问这个问题可能会更好。从简单的角度看,实现看起来是正确的,因为它区分了背包问题的情况,基本上是一种递归求值,由缓存结果的memonization表支持。