首页 > 后端开发 > C++ > 如何高效确定最佳背包方案中包含的物品?

如何高效确定最佳背包方案中包含的物品?

Susan Sarandon
发布: 2024-12-10 07:47:16
原创
306 人浏览过

How Can We Efficiently Determine the Items Included in the Optimal Knapsack Solution?

确定最佳背包解决方案中的元素

给定的背包算法有效地计算装箱问题的最优值。然而,当前的任务是确定构成此最佳解决方案的元素。

1.跟踪选择:

计算出 dp 矩阵中的最优值后,我们可以回溯以确定所选元素。

dp_copy = dp;  // Copy the dp matrix for backtracking

int weight_idx = W;
int item_idx = n;

while (weight_idx > 0 && item_idx > 0):
    if dp_copy[weight_idx][item_idx] != dp_copy[weight_idx - items[item_idx - 1].getWeight()][item_idx - 1]:
        // Element 'item_idx' is included in the optimal solution
        weight_idx -= items[item_idx - 1].getWeight()
        item_idx -= 1
登录后复制

2.伪代码解释:

  • 我们以相反的顺序从最后一个单元格到第一个单元格迭代 dp 矩阵。
  • 我们检查当前单元格与矩阵中上方和左侧的单元格等于相应项目的权重。
  • 如果是,则与该单元格值关联的项目包含在解决方案中。
  • 我们相应地调整权重索引和项目索引以进一步回溯。

3.复杂度:

这种回溯方法需要 O(W * n) 时间复杂度,其中 W 是袋子容量,n 是物品数量。它遍历矩阵中的每个单元一次并执行恒定时间搜索操作。

以上是如何高效确定最佳背包方案中包含的物品?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板