当前位置: 首页 > news >正文

回溯法----背包问题

背包问题

给定n中物品和一个容量为c的背包,物品i的重量为Wi,其价值为Vi,0-1背包问题是如何选择装入背包的物品(物品不可分割),使得装入背包的物品的价值为最大。

限界函数

procedure  BOUND( p , w, k , M)

∥p为当前效益总量; w  为当前背包重量; k 为上次去掉的物品; M  为背包容量; 返回一个新效益值∥

global  n , P( 1∶n ) ,W( 1∶n)

integer  k , i ; real b , c , p , w, M

b←p;  c←w

for  i←k +  1 to n do

c←c +  W( i )

if  c < M then b←b + P( i )

else  return ( b + (1 - ( c - M)/ W( i) ) * P( i ) )

endif

repeat

return  ( b)

end  BOUND

背包问题的回溯法求解

procedure BKNAP1( M, n ,W,  P, fw , fp , X)

∥M 是背包容量。有n 种物品, 其重量与效益分别存在数组W(1∶n) 和P(1∶n) 中; P(i)/W(i)≥P(i+1)/W(i+ 1)。fw 是背包的最后重量, fp 是背包取得的最大效益。X(1∶n) 中每个元素取0或1值。若物品k 没放入背包, 则X(k)=0 ;否则X(k)=1

   integer n , k , Y(1∶n) , i , X(1∶n) ; real M,W( 1∶n) , P(1∶n) , fw , fp , cw , cp;

   cw←cp←0 ; k←1; fp← -1 ∥cw 是背包当前重量;cp 是背包当前取得的效益值∥

   loop

   while k≤ n and cw + W(k) ≤M do ∥将物品k 放入背包∥

   cw←cw + W(k) ; cp←cp + P(k) ;Y(k) ←1; k←  k + 1

   repeat

   if k > n then fp←cp ; fw←cw;k←n;X←Y ∥修改解∥

   else Y( k)←0 ∥超出M, 物品K 不适合∥

   endif

   while BOUND( cp、cw, k , M) ≤fp do ∥上面置了fp 后,BOUND = fp∥

   while k≠0 and Y( k)≠1 do

   k←k - 1 ∥找最后放入背包的物品∥

   repeat

   if k = 0 then return endif ∥算法在此处结束∥

   Y( k) ←0; cw←cw - W( k) ; cp←cp - P( k) ∥移掉第k 项∥

   repeat

   k←k + 1

  repeat

   end BKNAP1

 

相关文章:

  • FTP攻略
  • __dopostback的用法
  • 保证应用程序只有一个实例运行
  • 活动目录系列之三:多域环境的实现(单站点)
  • linux添加开机自启动脚本示例详解
  • Web内容管理系统 Magnolia
  • CentOS6.4下Mysql数据库的安装与配置
  • 委托与事件的练习
  • 1-shell教程
  • 点击空白处键盘hide
  • 学习打卡-2018/07/19
  • 控件学习IOS开源项目(1)之RatingView星级评论控件学习
  • MapReduce剥洋葱
  • IDS与snort
  • upstream sent too big header while reading...
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • IndexedDB
  • js 实现textarea输入字数提示
  • JS+CSS实现数字滚动
  • Js基础知识(四) - js运行原理与机制
  • Laravel核心解读--Facades
  • Mybatis初体验
  • nfs客户端进程变D,延伸linux的lock
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • 闭包--闭包之tab栏切换(四)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端_面试
  • 入口文件开始,分析Vue源码实现
  • 一道面试题引发的“血案”
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​马来语翻译中文去哪比较好?
  • "无招胜有招"nbsp;史上最全的互…
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define 用法
  • #NOIP 2014#Day.2 T3 解方程
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (4.10~4.16)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (LeetCode C++)盛最多水的容器
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (备忘)Java Map 遍历
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (六)激光线扫描-三维重建
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (循环依赖问题)学习spring的第九天
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .NET Core引入性能分析引导优化
  • .net Stream篇(六)
  • .Net 垃圾回收机制原理(二)
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈