全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python基于回溯法子集树模板解决0-1背包问题实例

本文实例讲述了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小时内与您取得联系。