本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题。分享给大家供大家参考,具体如下:

问题
给定N个物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大?
分析
显然,放入背包的物品,是N个物品的所有子集的其中之一。N个物品中每一个物品,都有选择、不选择两种状态。因此,只需要对每一个物品的这两种状态进行遍历。
解是一个长度固定的N元0,1数组。
套用回溯法子集树模板,做起来不要太爽!!!
代码
'''0-1背包问题'''
n = 3 # 物品数量
c = 30 # 包的载重量
w = [20, 15, 15] # 物品重量
v = [45, 25, 25] # 物品价值
maxw = 0 # 合条件的能装载的最大重量
maxv = 0 # 合条件的能装载的最大价值
bag = [0,0,0] # 一个解(n元0-1数组)长度固定为n
bags = [] # 一组解
bestbag = None # 最佳解
# 冲突检测
def conflict(k):
global bag, w, c
# bag内的前k个物品已超重,则冲突
if sum([y[0] for y in filter(lambda x:x[1]==1, zip(w[:k+1], bag[:k+1]))]) > c:
return True
return False
# 套用子集树模板
def backpack(k): # 到达第k个物品
global bag, maxv, maxw, bestbag
if k==n: # 超出最后一个物品,判断结果是否最优
cv = get_a_pack_value(bag)
cw = get_a_pack_weight(bag)
if cv > maxv : # 价值大的优先
maxv = cv
bestbag = bag[:]
if cv == maxv and cw < maxw: # 价值相同,重量轻的优先
maxw = cw
bestbag = bag[:]
else:
for i in [1,0]: # 遍历两种状态 [选取1, 不选取0]
bag[k] = i # 因为解的长度是固定的
if not conflict(k): # 剪枝
backpack(k+1)
# 根据一个解bag,计算重量
def get_a_pack_weight(bag):
global w
return sum([y[0] for y in filter(lambda x:x[1]==1, zip(w, bag))])
# 根据一个解bag,计算价值
def get_a_pack_value(bag):
global v
return sum([y[0] for y in filter(lambda x:x[1]==1, zip(v, bag))])
# 测试
backpack(0)
print(bestbag, get_a_pack_value(bestbag))
效果图
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 回溯法
# 子集树模板
# 0-1背包问题
# python 回溯法模板详解
# Python基于回溯法子集树模板解决选排问题示例
# Python基于回溯法子集树模板解决全排列问题示例
# Python基于回溯法子集树模板解决m着色问题示例
# Python基于回溯法子集树模板解决旅行商问题(TSP)实例
# Python基于回溯法子集树模板实现图的遍历功能示例
# Python基于回溯法子集树模板解决取物搭配问题实例
# Python基于回溯法子集树模板解决数字组合问题实例
# Python基于回溯法子集树模板实现8皇后问题
# Python回溯法(Backtracking)的具体使用
# 两种
# 遍历
# 是一个
# 进阶
# 都有
# 相关内容
# 只需
# 感兴趣
# 数据结构
# 给大家
# 要对
# 这两种
# 更多关于
# 不要太
# 所述
# 最优
# 程序设计
# 如何选择
# 值为
# 使用技巧
相关文章:
北京专业网站制作设计师招聘,北京白云观官方网站?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
购物网站制作公司有哪些,哪个购物网站比较好?
如何快速搭建响应式可视化网站?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
如何登录建站主机?访问步骤全解析
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何用AWS免费套餐快速搭建高效网站?
无锡营销型网站制作公司,无锡网选车牌流程?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何通过网站建站时间优化SEO与用户体验?
智能起名网站制作软件有哪些,制作logo的软件?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
如何在建站宝盒中设置产品搜索功能?
建站之星安装后界面空白如何解决?
如何通过wdcp面板快速创建网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何快速查询域名建站关键信息?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站上市公司网站建设方案与SEO优化服务定制指南
已有域名建站全流程解析:网站搭建步骤与建站工具选择
如何挑选优质建站一级代理提升网站排名?
企业微网站怎么做,公司网站和公众号有什么区别?
如何设计高效校园网站?
如何通过云梦建站系统实现SEO快速优化?
如何通过主机屋免费建站教程十分钟搭建网站?
建站之星如何快速更换网站模板?
历史网站制作软件,华为如何找回被删除的网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
建站主机助手选型指南:2025年热门推荐与高效部署技巧
建站之星导航如何优化提升用户体验?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
nginx修改上传文件大小限制的方法
西安大型网站制作公司,西安招聘网站最好的是哪个?
建站主机选购指南:核心配置与性价比推荐解析
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何高效搭建专业期货交易平台网站?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
个人网站制作流程图片大全,个人网站如何注销?
XML的“混合内容”是什么 怎么用DTD或XSD定义
MySQL查询结果复制到新表的方法(更新、插入)
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站之星安装步骤有哪些常见问题?
如何在Windows虚拟主机上快速搭建网站?
Swift中swift中的switch 语句
网站微信制作软件,如何制作微信链接?
*请认真填写需求信息,我们会在24小时内与您取得联系。