算法设计与分析第7讲 背包问题.ppt_第1页
算法设计与分析第7讲 背包问题.ppt_第2页
算法设计与分析第7讲 背包问题.ppt_第3页
算法设计与分析第7讲 背包问题.ppt_第4页
算法设计与分析第7讲 背包问题.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 0 1背包问题 给定n种物品和一背包 物品i的重量是wi 其价值为vi 背包的容量为C 问应如何选择装入背包的物品 使得装入背包中物品的总价值最大 0 1背包问题是一个特殊的整数规划问题 2 背包问题的应用 1 一辆货车有固定的载重量C 有n种货物 每种货物i的重量和价格是 wi vi 运输哪些货物有最大的收益 2 一个计算机有内存C 有n个程序 分别耗费内存及其所交费用是 wi vi 调度哪些程序 使得费用最大 3 最优子结构性质 设所给0 1背包问题的一个最优解是 y1 y2 yn 则 y2 y3 yn 是右面的子问题的最优解否则 存在 z2 z3 zn 满足约束条件 并且那么 y1 z2 z3 zn 满足原问题的约束 并且那么 y1 y2 yn 就不是原问题的最优解了 4 最优子结构性质 最优子结构说明 一个n阶的问题 可由一个n 1阶的问题得到 以P n C 记录一个n阶 容量为C的问题 最优价值F n C y1 yn 为最优解 则如yn 1 y1 yn 1 是P n 1 C wn 的最优解 从而F n C F n 1 C Wn vn如果yn 0 y1 yn 1 是P n 1 C 的最优解 从而F n C F n 1 C 因此 F n C max F n 1 C wn Vn F n 1 C 5 递归树 F n C max F n 1 C wn Vn F n 1 C 如果C 0 F n C F n C F n 1 C wn F n 1 C F n 2 C Wn Wn 1 F n 2 C F n 2 C wn F n 2 C wn 1 动态规划 自底向上计算 6 F n C max F n 1 C wn Vn F n 1 C 如果C 0 F n C n 5 c 10 w 2 2 6 5 4 v 6 3 5 4 6 c 012345678910n 100666666666n 200669999999n 300669999111114n 4006699910111314n 50066991212151515回溯构造解ifF n c F n 1 c xn 0 elsexn 1 ifxn 0 由F n 1 c 继续构造xn 1 else由F n 1 c wn 构造x5 1 x4 0 x3 0 x2 1 x1 1 算法例 7 复杂性 计算矩阵元素需要nC次 故时间不仅与n相关 还与C相关 当C比较大时 如C 2n 就是一个指数复杂性 那么 把C w1 w2 都除以某个数 时间变小 但是能满足他们除了结果都是整数才行 另外 根据递归树 每一层实际上并不需要计算C个 时间还可以缩小 8 结束 9 最优子结构性质 设所给0 1背包问题的子问题的最优值为m i j 即m i j 是背包容量为j 可选择物品为i i 1 n时0 1背包问题的最优值 由0 1背包问题的最优子结构性质 可以建立计算m i j 的递归式如下 10 m n 1 m n 2 m n C m n 1 1 m n 1 2 m n 1 C m 1 1 m 1 2 m 1 C 其中 m 1 C 就是所求 11 算法 Knapsack Typev intw intc intn Type m jMax min w n 1 c For j 0 j1 i jmax min w i 1 c For j 0 j jmax j m i j m i 1 j For j jmax i w 1 m 1 c max m 1 c m 2 c w 1 v 1 12 计算最优值算法及其复杂性 算法描述 P72算法复杂度分析 从m i j 的递归式容易看出 算法需要O nc 计算时间 当背包容量c很大时 算法需要的计算时间较多 例如 当c 2n时 算法需要 n2n 计算时间 实际上m i j 中的j跟wi相关 并不需要用到 1 C 的紧密分布 其中很多j没有用到 13 算法改进 由m i j 的递归式容易证明 在一般情况下 对每一个确定的i 1 i n 函数m i j 是关于变量j的阶梯状单调不减函数 跳跃点是这一类函数的描述特征 在一般情况下 函数m i j 由其全部跳跃点惟一确定 如图所示 对每一个确定的i 1 i n 用一个表p i 存储函数m i j 的全部跳跃点 表p i 可依计算m i j 的递归式递归地由表p i 1 计算 初始时p n 1 0 0 示例 n 3 c 6 w 4 3 2 v 5 2 1 15 关于m i j 函数m i j 是由函数m i 1 j 与函数m i 1 j wi vi作max运算得到的 因此 函数m i j 的全部跳跃点包含于函数m i 1 j 的跳跃点集p i 1 与函数m i 1 j wi vi的跳跃点集q i 1 的并集中 易知 s t inq i 1 当且仅当wia且d b时 c d 受控于 a b 从而 c d 不是p i 中的跳跃点 除受控跳跃点外 p i 1 q i 1 中的其他跳跃点均为p i 中的跳跃点 由此可见 在递归地由表p i 1 计算表p i 时 可先由p i 1 计算出q i 1 然后合并表p i 1 和表q i 1 并清除其中的受控跳跃点得到表p i 16 另一个例子 实例 n 5 c 10 w 2 2 6 5 4 v 6 3 5 4 6 初始时p 6 0 0 w5 v5 4 6 因此 q 6 p 6 w5 v5 4 6 p 5 0 0 4 6 q 5 p 5 w4 v4 5 4 9 10 从跳跃点集p 5 与q 5 的并集p 5 q 5 0 0 4 6 5 4 9 10 中看到跳跃点 5 4 受控于跳跃点 4 6 将受控跳跃点 5 4 清除后 得到p 4 0 0 4 6 9 10 q 4 p 4 6 5 6 5 10 11 p 3 0 0 4 6 9 10 10 11 q 3 p 3 2 3 2 3 6 9 p 2 0 0 2 3 4 6 6 9 9 10 10 11 q 2 p 2 2 6 2 6 4 9 6 12 8 15 p 1 0 0 2 6 4 9 6 12 8 15 p 1 的最后的那个跳跃点 8 15 给出所求的最优值为m 1 c 15 17 算法复杂度分析 算法描述 P74 75上述算法的主要计算量在于计算跳跃点集p i 1 i n 由于q i 1 p i 1 wi vi 故计算q i 1 需要O p i 1 计算时间 合并p i 1 和q i 1 并清除受控跳跃点也需要O p i 1 计算时间 从跳跃点集p i 的定义可以看出 p i 中的跳跃点相应于xi xn的0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论