0-1背包的动态规划算法,部分背包的贪心算法和DP算法------算法导论
一、问题描述
0-1背包问题,部分背包问题。分别实现0-1背包的DP算法,部分背包的贪心算法和DP算法。
二、算法原理
(1)0-1背包的DP算法
0-1背包问题:有n件物品和一个容量为W的背包。第i件物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。其中每种物品只有一件,可以选择放或者不放。
最优子结构性质:对于0-1问题,考虑重量至多W的最值钱的一包东西。如果去掉其中一个物品j,余下的必是除j以外的n-1件物品中,可以带走的重量至多为W-wj的最值钱的一包东西。
用子问题定义状态:令c[i,w]表示前i件物品恰放入一个容量为w的背包可以获得的最大价值。则其状态转移方程便是:
在将前i件物品放入容量为w的背包中这个子问题,若只考虑第i件物品的策略,如果选择不放第i件物品,那么问题就转化为“前i-1件物品放入容量为w的背包中”,价值为c[i-1,w];如果选择放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为w-wi的背包中”,此时能获得的最大价值就是c [i-1,w-wi]再加上通过放入第i件物品获得的价值vi的和。按照这种思路进行递归,最后的能获得的最大价值即为c[n, W]。
(2)部分背包的贪心算法
部分背包问题与0-1背包问题相似,不同点在于部分背包问题可以选择物品的一部分,而不是像0-1背包一样只能做二分选择。
部分背包问题同样具有最优子结构的性质。考虑如果从最优货物中去掉某物品j的重量w,则余下的货物必是可以从n-1件原有物品和物品j的wj-w中可带走的,重量至多为W-w的价值最大的一包东西。
对于部分背包问题,可以使用贪心策略解决。首先对计算每件物品的单位价值,即vi/wi,然后按照贪心策略,在每次进行选择时优先选择单位价值高的物品。也就是说先选择当前单位价值最高的物品,如果拿完了该物品,并且仍然可以选取一些其他物品时,就再选取当前单位价值次高的物品,一直进行下去,直到不能再取为止。
(3)部分背包的DP算法
部分背包问题也可以用DP算法解决。由于题设中已说明所有物品重量和价值均为整数,利用这一特点,可以巧妙的将部分背包问题转化为0-1背包问题,然后调用0-1背包问题的DP算法进行求解。
转化方法是:把第i种物品拆成重量依次为1,2,4...2^(k-1),wi-2^k+1的物品,对应的价值则依次是单位价值乘以拆分重量所得结果。在拆分序列中k是满足wi -2^k+1>0的最大整数。例如,如果wi为14,就将这种物品分成系数分别为1,2,4,7的四件物品。这是二进制的思想,这种划分总可以表示该物品可以选择的所有重量值。通过这样的划分得到一个新的重量序列和价值序列,然后将新的重量序列和价值序列作为输入调用0-1背包算法即可解决部分背包问题。(详细思想可以参考背包九讲中的内容)
三、实验数据
(1)三个算法的实验数据输入均为:
a) 物品的个数n
b) 每个物品的价值v1,v2……vn
c) 每个物品的重量w1,w2……wn
d) 背包的最大重量W
(2)输出均为:
当前选择的方案所能获得的最大价值
在本实验对三个算法测试中,将取背包最大容量W为100,物品的个数n为5,所有物品组成的价值序列{v}为{60,100,120,80,90},重量序列{w}为{10,20,30,40,5}。将这些数据依次输入到各个算法中进行测试。
四、源代码
代码太多了,附下载链接:http://download.csdn.net/detail/zhh1992/8359275
0-1背包的动态规划算法,部分背包的贪心算法和DP算法------算法导论的更多相关文章
- WordCount作业提交到FileInputFormat类中split切分算法和host选择算法过程源码分析
参考 FileInputFormat类中split切分算法和host选择算法介绍 以及 Hadoop2.6.0的FileInputFormat的任务切分原理分析(即如何控制FileInputForm ...
- (转)两种高效过滤敏感词算法--DFA算法和AC自动机算法
原文:https://blog.csdn.net/u013421629/article/details/83178970 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十 ...
- nyoj--311--完全背包(动态规划,完全背包)
完全背包 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w. ...
- 最长不下降子序列的O(n^2)算法和O(nlogn)算法
一.简单的O(n^2)的算法 很容易想到用动态规划做.设lis[]用于保存第1~i元素元素中最长不下降序列的长度,则lis[i]=max(lis[j])+1,且num[i]>num[j],i&g ...
- Hadoop Mapreduce 中的FileInputFormat类的文件切分算法和host选择算法
文件切分算法 文件切分算法主要用于确定InputSplit的个数以及每个InputSplit对应的数据段. FileInputFormat以文件为单位切分成InputSplit.对于每个文件,由以下三 ...
- 聚类算法K-Means算法和Mean Shift算法介绍及实现
Question:什么是聚类算法 1.聚类算法是一种非监督学习算法 2.聚类是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法 3.理论上,相同的组的数据之间有相同的属性或者是特征,不 ...
- java实现最小生成树的prim算法和kruskal算法
在边赋权图中,权值总和最小的生成树称为最小生成树.构造最小生成树有两种算法,分别是prim算法和kruskal算法.在边赋权图中,如下图所示: 在上述赋权图中,可以看到图的顶点编号和顶点之间邻接边的权 ...
- CJOJ 2040 【一本通】分组背包(动态规划)
CJOJ 2040 [一本通]分组背包(动态规划) Description 一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2, ...
- CJOJ 2307 【一本通】完全背包(动态规划)
CJOJ 2307 [一本通]完全背包(动态规划) Description 设有n种物品,每种物品有一个重量及一个价值.但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干 ...
随机推荐
- MSSQL SERVER 2008 R2 无法连接到数据库,用户sa登录失败,错误:18456
原因:勾选了强制实施密码策略,但是设置的密码很简单依然可以,比如:123456 这是为什么?原来,这个功能要用到NetValidatePasswordPolicy() API这个函数. (该功能只有在 ...
- Android之ListView性能优化
ListView滚动速度优化主要可以应用以下几点方法来实现: 1.使用Adapter提供的convertView convertView是Adapter提供的视图缓存机制,当第一次显示数据的时候,ad ...
- Eclipse创建新项目时无法输入项目名的解决方法
放假耍了那么久,也是该收心忙活了. 今天打开Eclipse新建项目时,发生了一个很奇怪的情况,就是在下面这个位置的输入框无法输入. 经过百度之后,发现解决方案是(原地址点我) Eclipse图标右键 ...
- Google Play和基于Feature的过滤
田海立@CSDN 翻译自Google Play and Feature-Based Filtering GooglePlay会过滤出那些对用户可见的应用程序,因此用户只能看到和下载那些与他们的设备兼容 ...
- Enze frist day
今天是我来到云和学院正式开班上课的第一天,我选择学习的科目是.net.因为.net我在学校的时候接触过一些,所以我想要更加深入的去学习.我觉得一个学生在学习上最怕的是没有遇到一位负责任的好老师,但幸运 ...
- python实现单向链表
#Definition for singly-linked list. class ListNode(object): def __init__(self, x): self.val = x self ...
- hdoj 2222
http://acm.hdu.edu.cn/showproblem.php?pid=2222 第一道 AC自动机.....trie树的建立 和 AC自动机的查询,,可作模版... 解题思路:AC的应用 ...
- 转: 让html5标签在ie8及以下的被正确解析的解决方案
最近仿的几个主题中,有几个是采用html5语法制作的,html5嘛,以后必然大势所趋,但是现有的很多浏览器并不支持这种新的标准. 而我制作网站习惯用的是chrome浏览器的,当然不存在不兼容问题了. ...
- 在windows下的QT编程中的_TCHAR与QString之间的转换
由于在windows下的QT编程中,如果涉及到使用微软的API,那么不可避免使用_TCHAR这些类型,因此在网上查了一下,其中一个老外的论坛有人给出了这个转换,因此在这里做一下笔记 : )#ifdef ...
- Air Raid(最小路径覆盖)
Air Raid Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7511 Accepted: 4471 Descript ...