0-1背包问题求解方法综述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析与设计大作业…

实验题目:0-1背包问题求解方法综述

组员:

班级:

指导老师:

]

%

0-1背包问题求解方法综述

【摘要】:0-1背包问题是一个经典的NP-hard组合优化问题,现实生

活中的很多问题都可以以它为模型。本文首先对背包问题做了阐述,

然后用蛮力解法、动态规划算法、贪心算法和回溯解法对背包问题进

行求解,分析了0-1背包问题的数学模型,刻划了最优解的结构特征,

建立了求最优值的递归关系式。最后对四种算法从不同角度进行了对

比和总结。

【关键词】:0-1背包问题;蛮力解法;动态规划算法;贪心算法;回溯解法。

0.引言

0-1背包问题是指给定n个物品,每个物品均有自己的价值vi和重量wi(i=1,2,…,n),

再给定一个背包,其容量为W。要求从n个物品中选出一部分物品装入背包,这部

分物品的重量之和不超过背包的容量,且价值之和最大。单个物品要么装入,要么

不装入。很多问题都可以抽象成该问题模型,如配载问题、物资调运[1]问题等,因

此研究该问题具有较高的实际应用价值。目前,解决0-1背包问题的方法有很多,

主要有动态规划法、回溯法、分支限界法、遗传算法、粒子群算法、人工鱼群算

法、蚁群算法、模拟退火算法、蜂群算法、禁忌搜索算法等。其中动态规划、回

溯法、分支限界法时间复杂性比较高,计算智能算法可能出现局部收敛,不一定能

找出问题的最优解。文中在动态规划法的基础上进行了改进,提出一种求解0-1

背包问题的算法,该算法每一次执行总能得到问题的最优解,是确定性算法,算法

的时间复杂性最坏可能为O(2n)。

背包问题描述

0-1背包问题(KP01)是一个著名的组合优化问题。它应用在许多实际领域,如

项目选择、资源分布、投资决策等。背包问题得名于如何选择最合适的物品放置

于给定背包中。本文主要研究背包问题中最基础的0/1背包问题的一些解决方法。

为解决背包问题,大量学者在过去的几十年中提出了很多解决方法。解决背

包问题的算法有最优算法和启发式算法[2],最优算法包括穷举法、动态规划法、

分支定界法、图论法等,启发式算法包括贪心算法、遗传算法、蚁群算法、粒子

算法等一些智能算法。

(

0-1背包问题一般描述为:给定n 种物品和一个背包。物品i 的重量是w(i),其价值为v(i),背包的容量为c 。问应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大

在选择装入背包的物品时,对每种物品i 只有两种选择,即装入背包或不装入背包。不能将物品i 装入背包多次,也不能只装入部分的物品i 。因此,该问题称为0-1背包问题。

此问题的形式化描述是,给定n i v w c i i ≤≤>>>1000,,,,要求找出一个n

元0-1向量n i x x x x i n ≤≤∈1}1,0{21,),,,,( ,使得c

x w i i i ≤∑=n

1

,而且i

n

i i x v ∑=1

达到最大。

数学模型:∑=n

i i i x v 1max

约束条件:

c x w i i i ≤∑=n

1

, n i x i

≤≤∈1},1,0{

背包问题的求解算法

蛮力算法(brute force method ) 基本思想:

对于有n 种可选物品的0/1背包问题,其解空间由长度为n 的0-1向量组成,可用子集数表示。在搜索解空间树时,深度优先遍历,搜索每一个结点,无论是否可能产生最优解,都遍历至叶子结点,记录每次得到的装入总价值,然后记录遍历过的最大价值。 代码实现: 。

#include #include using namespace std; #define N 100 <=C){

for (int k=0;k

} int

sum1=KnapSack1(n,a,C,X);

i v i w i v i w i r i v i

w

时,在步骤(3)中计算最优解时,通常需记录更多的信息,以便在步骤(4)中,根据所记录的信息,快速构造出一个最优解。

使用动态规划求解问题,最重要的就是确定动态规划3要素:(1)问题的阶段;(2)每个阶段的状态;(3)从前一个阶段转化后一个阶段之间的递推关系[4]。

分析最优解的性质,刻画最优解的结构特征——最优子结构性质分析

设),,,(n x x x 21所给0-1背包问题的一个最优解,则),,(n x x x 32是下面相应子问题的一个最优解: 目标函数:i

n

i i x v ∑=2

max

约束条件:

)2}(1,0{,112

n i x x w c x

w i n

i i

i ≤≤∈-≤∑=

证明:若),,(n x x x 32不是上述子问题的一个最优解,而),,,(n 32y y y 是他的最优解。由此可知,i i i n i i x v y v ∑∑>=n

2

且c y w x w i n

i i ≤+∑=2

11。因此

c

y w x w x v y v x v i n

i i i

n

i i n i i ≤+>+∑∑∑===2

111

1211

这说明),,,(n y y x 21是原问题的一个更优解,从而),,,(n y y y 21不是所给原问题的最优解,产生矛盾。

所以),,(n x x x 32是上述子问题的一个最优解。 递归关系

由于0-1背包问题的解是用向量),,,(n x x x 21来描述的。因此,该问题可以看做是决策一个n 元0-1向量),,,(n x x x 21。对于任意一个分量i x 的决策是“决定i x =1或i x =0,i=1,2,…,n 。对1-i x 决策后,序列)(121-i x x x ,,, 已被确定,在决策i x 时,问题处于下列两个状态之一:

(1)背包容量不足以装下物品i ,则=0,装入背包的价值不增加; (2)背包容量足以装入物品i,则=1,装入背包的价值增加i v 。 在这种情况下,装入背包的价值最大化应该是对决策后的价值。 设所给0-1背包问题的子问题

n

k i x j x

w x v k k

n

i

k k

n

i

k k

k ≤≤∈≤∑∑==,,)1,0(max

的最优值为m(i,j),即m(i,j)是背包容量为j ,可选择的物品为i,i+1,…,n 时0-1背包问题的最优值。由0-1背包问题的最优子结构性质,可以建立计算m (i,j )的递归式为: —

相关文档
最新文档