5.5动态规划求解0/1背包问题.

Slides:



Advertisements
Similar presentations
2 和 5 的倍数的特征 运动热身 怎样找一个数的倍数? 从小到大写出 2 的倍数( 10 个): 写出 5 的倍数( 6 个) 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 5 , 10 , 15 , 20 , 25 , 30.
Advertisements

第八章 第四节 机动 目录 上页 下页 返回 结束 一个方程所确定的隐函数 及其导数 隐函数的微分法.
2.6 隐函数微分法 第二章 第二章 二、高阶导数 一、隐式定义的函数 三、可微函数的有理幂. 一、隐函数的导数 若由方程 可确定 y 是 x 的函数, 由 表示的函数, 称为显函数. 例如, 可确定显函数 可确定 y 是 x 的函数, 但此隐函数不能显化. 函数为隐函数. 则称此 隐函数求导方法.
第2章 证券市场的运行与管理.
第四章 汇率与汇率制度 第一节 外汇与汇率 一、外汇 (一)外汇有狭义与广义之分
Statistical Probability for Production Simulation
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
第三章 函数逼近 — 最佳平方逼近.
Knapsack Problem (背包问题)
动态规划 中山纪念中学 宋新波 本模板来源于网络,由第一课件网整理发布,免费分享给大家使用。
第四章 函数的积分学 第六节 微积分的基本公式 一、变上限定积分 二、微积分的基本公式.
第5章 定积分及其应用 基本要求 5.1 定积分的概念与性质 5.2 微积分基本公式 5.3 定积分的换元积分法与分部积分法
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
天气和气候.
初中数学八年级下册 (苏科版) 10.4 探索三角形 相似的条件(2).
非线性反馈移位寄存器探讨 戚文峰.
第5章 §5.3 定积分的积分法 换元积分法 不定积分 分部积分法 换元积分法 定积分 分部积分法.
第5章 动态规划 2018/11/16.
§3.7 热力学基本方程及麦克斯韦关系式 热力学状态函数 H, A, G 组合辅助函数 U, H → 能量计算
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
递推算法 递推是一种重要的数学方法,在数学和计算机领域都有广泛应用。这种算法的特点是:一个问题的求解需要一系列的计算,在已知条件和所求问题之间总存在某种相互联系的关系。在计算时,可以找到前后过程间的数量关系,即递推。递推算法包括顺推和逆推。 递推算法的关键在于找到相邻数据项之间的关系,即递推关系,建立递推关系式。我们有时将递推算法看成一种特殊的迭代算法。
元素替换法 ——行列式按行(列)展开(推论)
第三章 統計資料之分析解釋(一).
临界区软件互斥软件实现算法.
第4章 非线性规划 一维搜索方法 2011年11月.
计算机数学基础 主讲老师: 邓辉文.
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
动态规划(Dynamic Programming)
第二章 插值.
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
导数的应用 ——函数的单调性与极值.
第四章习题.
课题:1.5 同底数幂的除法.
第二章 基本遗传算法(GA) 2.1 基本遗传算法描述 基本遗传算法的构成要素 (1) 染色体编码方法
顺序表的删除.
第4章 贪心方法.
离散数学─归纳与递归 南京大学计算机科学与技术系
第三章 平均数、标准差与变异系数 第一节 平均数 上一张 下一张 主 页 退 出.
复习.
第十章 双线性型 Bilinear Form 厦门大学数学科学学院 网址: gdjpkc.xmu.edu.cn
定理21.9(可满足性定理)设A是P(Y)的协调子集,则存在P(Y)的解释域U和项解释,使得赋值函数v(A){1}。
第16讲 相似矩阵与方阵的对角化 主要内容: 1.相似矩阵 2. 方阵的对角化.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
1.2 子集、补集、全集习题课.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第三章 函数的微分学 第二节 导数的四则运算法则 一、导数的四则运算 二、偏导数的求法.
4) 若A可逆,则 也可逆, 证明: 所以.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
学习任务三 偏导数 结合一元函数的导数学习二元函数的偏导数是非常有用的. 要求了解二元函数的偏导数的定义, 掌握二元函数偏导数的计算.
第七、八次实验要求.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
Models and Software Practice of the Operations Research
第三章 贪心方法 (Greedy Technique)
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
第二章 基本遗传算法(GA) 2.1 基本遗传算法描述 基本遗传算法的构成要素 (1) 染色体编码方法
正弦、余弦函数的性质 华容一中 伍立华 2017年2月24日.
§2 方阵的特征值与特征向量.
动态规划 Floyd最短路径算法 高文宇
數學遊戲二 大象轉彎.
基于列存储的RDF数据管理 朱敏
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
3-3 随机误差的正态分布 一、 频率分布 在相同条件下对某样品中镍的质量分数(%)进行重复测定,得到90个测定值如下:
第四章 函数的 积分学 第七节 定积分的换元积分法     与分部积分法 一、定积分的换元积分法 二、定积分的分部积分法.
三角 三角 三角 函数 余弦函数的图象和性质.
比和比值 黃琮聖 林姿均.
§4.5 最大公因式的矩阵求法( Ⅱ ).
第三章 线性方程组 §4 n维向量及其线性相关性(续7)
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

5.5动态规划求解0/1背包问题

1.问题描述 背包容量M,n个物品,分别具有效益值P1…Pn,物品重量w1…wn,从n个物品中,选择若干物品放入背包,物品要么整件放入背包,要么不放入。怎样决策可以使装入背包的物品总效益值最大? 形式化描述: 目标函数: 约束条件: 0/1背包问题:KNAP(1,n,M)

0/1背包问题:M=6,N=3,W=(3,3,4),P=(3,3,5) 贪心法:p3/w3 > p1/w1 > p2/w2 贪心解 ∑P=5(0,0,1) 最优解是:∑P=6(1,1,0)

贪心法求解0/1背包问题不一定得到最优解! 动态规划求解的问题必须满足最优化原理

2.最优化原理证明 设y1,y2,…,yn是x1,x2,…,xn的0/1值最优序列。 若y1=0, KNAP(2,n,M)是初始决策产生的状态。则y2,…,yn相对于KNAP(2,n,M)将构成一个最优序列。否则,y1,y2,…,yn将不是KNAP(1,n,M)的最优解 若y1=1, KNAP(2,n,M-w1)是初始决策产生的状态。则y2,…,yn相对于KNAP(2,n,M-w1)将构成一个最优序列。 否则,设存在另一0/1序列z1,z2,…,zn,使得 且 则序列y1,z2,…,zn将是一个对于KNAP(1,n,M)具有更大效益值的序列。 故,最优性原理成立

3 从前向后求解的递推关系式 记fj(X)是KNAP(1,j,X)的最优解,则fn(M)是KNAP(1,n,M)的最优解 对于fn(M)有: 3 从前向后求解的递推关系式 记fj(X)是KNAP(1,j,X)的最优解,则fn(M)是KNAP(1,n,M)的最优解 对于fn(M)有: fn(M) = max{fn-1(M), fn-1(M-wn)+pn} 对于任意的fi(X),i>0,有 fi(X) = max{fi-1(X),fi-1(X-wi)+pi} 第N个物品不放入xn=0 第N个物品放入xn=1

递推过程: ★初始值 0 X≥0 f0(X)= -∞ X<0 ★f1(X)=max{f0(X),f0(X-W1)+P1} 求出所有可能的X对应的fi值 ★fi(X)=max{fi-1(X),fi-1(X-Wi)+Pi} ★最后求 fn(M)=KNAP(1,n,M)

n=3,(w1,w2,w3)=(2,3,4),(p1,p2,p3)=(1,2,5),M=6 递推计算过程 -∞ X<0 f0(X)= fi(X) = max{fi-1(X),fi-1(X-wi)+pi} 4例用动态规划法求解0/1背包问题 n=3,(w1,w2,w3)=(2,3,4),(p1,p2,p3)=(1,2,5),M=6 递推计算过程 -∞ X<0 f0(X)= 0 X≥0 -∞ X<0 max{0,-∞+1}=0 0≤X<2 max{0,0+1} = 1 X≥2 0 0≤X<2 1 2≤X<3 max{1,0+2}=2 3≤X<5 max{1,1+2} = 3 X≥5 f3(M)= max{3,1+5} = 6 f1(X)= f2(X)=

解向量的推导 f3(M)=6 f2(M)<>6 X=(1,0,1) x3=1 ΔP=6-p3=1 ΔM=6-w3=2

fi(x) 5. 0/1背包问题图解过程 1 2 3 4 5 6 7 f0(x)=0 x i:fi-1(x-wi) + pi f0(x)=0 x i:fi-1(x-wi) + pi i=0:函数不存在 1 2 3 4 5 6 7 i=1:f0(x-w1) + p1 x 1 2 3 4 5 6 7 f1(x) x 1 2 3 4 5 6 7 i=2:f1(x-w2) + p2 x 1 2 3 4 5 6 7 x f2(x)

● fi-1(X-wi)+pi曲线的构造:将fi-1(X)的曲线在X轴上右移wi个单位,然后上移pi个单位而得到; 2 3 4 5 6 7 8 x 9 i=3:f2(x-w3) + p3 1 2 3 4 5 6 7 8 x 9 f3(x) 10 注: ● fi-1(X-wi)+pi曲线的构造:将fi-1(X)的曲线在X轴上右移wi个单位,然后上移pi个单位而得到; ● fi(X)曲线的构造:由fi-1(X) 和fi-1(X-wi)+pi的曲线按X相同时取大值的规则归并而成

6. 序偶表示法 记 fi(X)的序偶集合为 Si = {(Pj,Wj)|Wj是fi曲线中使得fi产生一次阶跃的X值, 0≤j<r} 即Pj=fi(Wj) ● (P0,W0)=(0,0) ●图中有r个阶跃值, 对应r个(Pj,Wj)序偶,1≤j≤r ●图中若Wj<Wj+1,则Pj<Pj+1,0≤j<r ●图中若Wj≤X<Wj+1,fi(X)=fi(Wj) ●图中若X≥Wr,fi(X)=fi(Wr)

● Si的构造 记 是fi-1(X-wi)+pi的所有序偶的集合,则 其中,Si-1是fi-1的所有序偶的集合 Si的构造:由Si-1和 按照支配规则合并而成。 支配规则:如果Si-1和 之一有序偶(Pj,Wj),另一有(Pk,Wk), 且有 Wj≥Wk , Pj≤ Pk, 则序偶(Pj,Wj)将被舍弃。 (即取最大值规则)。 初始序偶集合S0={(0,0)}

例2 例1的序偶表示法 S0={(0,0)} ={(1,2)} S1={(0,0),(1,2)} ={(2,3),(3,5)} (w1,w2,w3)=(2,3,4),(p1,p2,p3)=(1,2,5) 例2 例1的序偶表示法 S0={(0,0)} ={(1,2)} S1={(0,0),(1,2)} ={(2,3),(3,5)} S2={(0,0),(1,2), (2,3),(3,5)} ={(5,4),(6,6), (7,7)} S3={(0,0),(1,2), (2,3),(5,4),(6,6), (7,7)} 注:序偶(3,5)被(5,4)“支配”而删除 +(1,2) +(2,3) +(5,4)

KNAP(1,n,M)问题的解 ★ Sn是KNAP(1,n,X)在0≤X≤M各种取值下的最优解 xi的推导 xn: 设Sn的最后一对有效序偶是(Pl,Wl),则 (Pl,Wl)或者是Sn-1的最末一对序偶, 或者是(Pj+pn,Wj+wn),其中 (Pj,Wj)∈ Sn-1且Wj是Sn-1中满足Wj+wn≤M的最大值。 ● 若(Pl,Wl)∈ Sn-1,则Xn=0;否则, ● (Pl-pn,Wl-wn)∈ Sn-1 ,Xn=1 xn-1: 若xn=0,则判断(Pl,Wl)∈ Sn-2?,以确定Xn-1的值 若xn=1,则依据(Pl-pn,Wl-wn)∈ Sn-2?,以判断Xn-1的值 xn-2,…,x1将依次推导得出

例2的解向量推导 S0={(0,0)} S1={(0,0),(1,2)} S2={(0,0),(1,2), (2,3),(3,5)} S3={(0,0),(1,2), (2,3),(5,4),(6,6)} M=6,f3(6)由S3中的序偶(6,6)给出。 1) ∵(6,6) S2 ∴x3=1 2) ∵(6-p3,6-w3)=(1,2)∈S2且(1,2)∈S1 ∴x2=0 3) ∵(1,2) S0 ∴x1=1 因此得到X(1,0,1)

算法1 非形式的背包算法 procedure DKP(p,w,n,M) S0 ←{(0,0)} for i←1 to n-1 do ←{(P1,W1)|(P1-pi,W1-wi)∈ Si-1 and W1≤M} Si ←MERGE-PURGE(Si-1, ) repeat (PX,WX)← Sn-1的最末一个有效序偶 (PY,WY)←(P1+pn,W1+wn),其中,W1是Sn-1中使得W+wn≤M的所有序偶中取最大值的W //沿Sn-1,…, S1回溯确定xn,xn-1,…,x1的取值// if PX>PY then xn←0 //PX将是Sn的最末序偶// else xn←1 //PY将是Sn的最末序偶// endif 回溯确定xn-1,…,x1 end DKP

7. DKP的实现 1)序偶集Si的存储结构 使用两个一维数组P和W存放所有的序偶(Pl,Wl),其中P存放Pl值,W存放Wl值 ● 序偶集S0, S1,…, Sn-1顺序、连续存放于P和W中; ● 用指针F(i)表示Si中第一个元素在数组 (P,W)中的下标位置,0≤i≤n; ● F(n)=Sn-1中最末元素位置+1 1 2 3 4 5 6 7 P 0 0 1 0 1 2 3 W 0 0 2 0 2 3 5 F(0)F(1) F(2) F(3)

2) 序偶的生成与合并 ★ Si的序偶将按照P和W的递增次序生成 ★ 中序偶的生成将与 和Si-1的合并同时进行 设 生成的下一序偶是(PQ,WQ);对所有的(PQ,WQ),根据支配规则处理如下: ⑴ 将Si-1中所有W值小于WQ的序偶直接计入Si中; ⑵ 根据支配规则,若Si-1中有W值小于WQ的序偶支配 (PQ,WQ),则(PQ,WQ)将被舍弃,否则(PQ,WQ)计入Si中;并清除Si-1中所有可被支配的序偶,这些序偶有W≥WQ且P≤PQ ⑶ 对所有的(PQ,WQ)重复上述处理; ⑷ 将最后Si-1中剩余的序偶直接计入Si中; ⑸ 所有计入Si中的新序偶依次存放到由F(i)指示的Si的存放位 置上。 注:不需要存放 的专用空间

3) 算法的实现 0/1背包问题的算法描述 procedure DKNAP(p,w,n,M,m) 3) 算法的实现 0/1背包问题的算法描述 procedure DKNAP(p,w,n,M,m) real p(n), w(n), P(m), W(m),pp,ww,M;integer F(0:n),l,h,u,i,j,p,next F(0)←1;P(1)←W(1)←0 //S0// l←h←1 // S0 的首端和末端;l是Si-1的首端,h是Si-1的末端// F(1)←next←2 //P和W中第一个空位;next指示P/W中可以存放(P,W)序偶的第一个位置// for i←1 to n-1 do //生成Si// k←l u←在l≤r≤h中使得W(r)+wi≤M的最大r //u指示由Si-1生成 的最大有效位置// for j←l to u do //生成 ,同时进行归并// (pp,ww)←(P(j)+pi,W(j)+wi) //生成 中的下一个元素// while k≤h and W(k)<ww do //从Si-1中取元素并归并// P(next)←P(k);W(next)←W(k) //所有W(k)<ww 的序偶直接归并// next←next+1;k←k+1 repeat

//按照支配规则考虑(pp,ww)及Si-1中的序偶// if k≤h and W(k)=ww then pp←max(pp,P(k)) k←k+1 endif if pp>P(next-1) then (P(next), W(next))←(pp,ww) next←next+1 //清除Si-1中的序偶// while k≤h and P(k)≤P(next-1) do k←k+1 repeat repeat while k≤h do//将Si-1中剩余的元素并入Si // (P(next),W(next))←(P(k),W(k)) next←next+1; k←k+1 //对Si+1置初值 // l←h+1; h←next -1; F(i+1)←next CALL PARTS //递推求取Xn,Xn-1,…,x1// END DKNAP

4. 过程DKNAP的分析 1) 空间复杂度 记Si中的序偶数为:|Si| 则有, |Si|≤ |Si-1|+| | 故,DKNAP所需的空间复杂度(P、W数组)为:Ο(2n)

且 2) 时间复杂度 由Si-1生成Si的时间为: ,0≤i≤n-1 故,DKNAP计算所有的Si所需的时间为: 注: 若每件物品的重量wi和效益值pi均为整数,则Si中每个序偶(P,W)的P值和W值也是整数,且有 ,W≤M 又,在任一Si中的所有序偶具有互异P值和W值,故有 且

在所有wj和pj均为整数的情况下,DKNAP的时间和空间复杂度将为: 当N很大时,算法的有效性不理想,但是在实际求解效果还是可以的,因为多数情况下P、W都是整数,并且M远小于2n,而且支配规则有效删除Si中的序偶。