代码改变世界

回溯法解0/1背包问题

  youxin  阅读(986)  评论(0编辑  收藏  举报

我们前面说过,贪心算法用价值重量比对于可分割的背包问题是有效的,但对于0/1背包问题就无效的(0/1背包是不能分割,要就要,不要就不要)。本节用回溯法解0/1背包问题,求解过程如下:

 

 

在搜索过程中,尽量沿着左儿子节点前进,当不能沿着左儿子节点继续前进时,就得到问题的一个部分解,并把搜索转移到

右儿子子树。此时,估计由这个部分解所能得到的最大价值,把该值与当前的上界进行比较,如果高于当前的上界,就继续

由右儿子子树向下搜索,扩大这个部分解,直到找到一个可行解,最后把可行解保存起来,用当前可行解的值刷新目标函数的

上界,并向上回溯,寻找其他可能解;如果有部分所估计的最大值小于当前的上界,就丢弃正在搜索的部分解,直接向上回溯。

 

向上回溯有2种情况:如果当前阶段是左儿子分支节点,就转而搜索相应的右儿子分支节点;如果当前的节点是右儿子分支节点,

就沿着右儿子分支节点向上回溯,直到左儿子分支节点为止,然后再转而搜索相应的右儿子分支节点

 

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2012-08-22 清除浮动(闭合浮动元素)方法总结
2012-08-22 css layout/fixed03: 2 column left navigation
2012-08-22 css layout/fixed02: 1 column top navigation
2012-08-22 css layout/fixed01/1 column no navigation
2012-08-22 css layout :center
2012-08-22 css :three column +top box
2012-08-22 css float浮动
点击右上角即可分享
微信分享提示