当前课程知识点:算法设计与分析 > 9 Approximation Algorithms > 9.5 Knapsack Problem > Knapsack Problem
在动态规划一章中
我们研究了背包问题
并给出伪多项式时间算法
我们从近似算法的角度
再来研究背包问题
对于近似算法
我们可能得到的最好的结果
是所谓的多项式时间近似格式
简称为PTAS
是指对于任意的ε>0
都有(1+ε)-近似算法
PTAS可以得到任意精度的解
当然这是以花费更多时间为代价
运行的时间往往是1/ε的函数
在这部分 我们介绍背包问题的PTAS算法
主要是通过舍入的方法
回顾一下背包问题
我们先定义背包问题
有n个物品和1个背包
物品i有两个参数
权重w_i>0和收益v_i>0
背包有一个容积W
不失一般性
我们假设 w_i≤W
目标是
选择权重和不超过背包容积的物品
使得收益和最大
比如这个例子中有五个物品
有对应的权重和收益
一个背包 容积为11
物品3和4的权重之和为11
能够装入背包
获得的收益是40
我们先来证明
背包问题的判定问题是NP完全的
背包问题的判定问题为
给定一个物品集合X
物品i有两个参数
权重wi>0和收益vi>0
背包有一个容积W
再给定一个目标值V
是否存在S⊆X
使得S中物品权重和不超过W
收益和不小于V
我们建立从子集和问题到背包问题的规约
子集和问题为
给定一个有限集合X
其中元素值为ui
和一个整数U
是否存在S⊆X
使得其中元素之和为U
对于子集和问题给定的一个实例(u_1,…,u_n,U)
我们构架背包问题的实例
令v_i=w_i=u_i
V=W=U
这两个实例同为是实例或否实例
背包判定问题显然是属于NP的
因此 它是NP完全问题
再回顾一下
我们学习过的背包问题的动态规划算法
定义OPT(i,w)是从物品1到i中选择
并且当前的容积为w时
能获得的最大收益
考虑第i阶段
只有两种情况
Case1
OPT没有选择物品i
它一定是在{1,2,…,i-1}中
同样的容积w下做出的最优选择
获取的收益为OPT(i-1,w)
Case2
OPT选择了物品i
那么对于物品{1,2,…,i-1}
剩余容积为w-w_i的情况下
最优解一定做出了最优选择
对应的收益为v_i+OPT(i-1,w-w_i)
最优解
一定是这两种情况中最好的一个
因此我们可以建立动态规划基本方程
边界情况是当i=0
显然 最优值为零
如果当前要考虑的物品的权重
大于当前的容积
那么 OPT(i,w)=OPT(i-1,w)
最主要的部分是刚才我们所讨论的两种情况
分别的对应目标值为
OPT(i-1,w)和v_i+OPT(i-1,w-w_i)
两者取大
这样我们就建立起来动态规划基本方程
我们再来看一下算法的运行时间
算法的运行时间是O(nW)
这里W是背包的容积
是一个输入的数值
这个数值的输入规模是logW
所以它并不是一个多项式时间算法
称为伪多项式时间算法
类似地 我们可以给出第二个动态规划算法
定义OPT(i,v)是从物品1到i中选择
并且当前的收益恰为v时
物品的最小权重和
考虑第i阶段
只有两种情况
Case1
OPT没有选择物品i
它一定是在{ 1,2,…,i-1 }中
得到同样的收益v
做出的最优选择
物品的总权重为OPT(i-1,v)
Case2
OPT选择了物品i
那么对于物品{1,2,…,i-1}
获得收益为v-v_i的情况下
最优解一定做出了最优选择
对应的权重和为wi+OPT(i-1,v-v_i)
最优解
一定是这两种情况中最好的一个
因此我们可以建立动态规划基本方程
边界情况是
当v=0 最优值为0
当i=0,v>0时
最优值为无穷
如果当前要考虑的物品的收益大于v
那么一定不选择这个物品
即OPT(i,v)=OPT(i-1,v)
我们所讨论的两种情况
分别的对应目标值为
OPT(i-1,v)和w_i+OPT(i-1,v-v_i)
两者取小
这样我们就建立起来动态规划基本方程
我们可以从小到大
逐一求出OPT(i,v)
算法的运行时间是O(nV^*)
这里的V^*是最优值
等于最大的v
使得OPT(n,v)≤W
V^*不超过n倍的最大物品收益
因此算法的运行时间是O(n^2v_max)
同样地 这不是一个多项式时间算法
也是一个伪多项式时间算法
我们将要给出的算法
基于这样的直觉
我们把给定的物品收益
在一个小范围内舍入
然后对舍入的例子用动态规划算法求解
得到它的最优解
再和最大的物品收益进行比较
返回两者中更优的一个
比如对下面的例子
物品的价值都很大
我们以10万为单位
对这些价值向上取整
得到右边舍入后的例子
可以发现 舍入后的例子中
物品的价值变得很小
再调用第二个动态规划算法的话
可以期望快速求出其最优解
关键是如何分析这个算法给出解的质量
及具体的运行时间
令θ为缩放比例参数
令物品i的新价值为v_i bar
为v_i/θ向上取整再乘以θ
v_i/θ向上取整记为花写的v_i
令vmax为原实例中物品的最大价值
ε确定精度的参数
θ为控制缩放比例的参数=εv_max/n
一个直接的发现是
以v bar和花写v
作为物品的价值求得的最优解是一样的
直觉上 v bar与v很接近
用v bar作为物品的价值求得的最优值
也接近于原实例的最优值
而花写v相对较小
而且都是整数
可以用动态规划来快速求解
具体来说 这个算法的运行时间是O(n^3/ε)
注意第二个动态规划算法的运行时间是
O(n^2花写v_max)
花写v_max=v_max/θ向上取整
根据θ的设定
可知它等于n/ε向上取整
因此算法的运行时间是O(n^3/ε)
下面的定理表明
我们的算法是一个1+ε近似算法
也就是一个PTAS
令S是我们算法得到的解
S^*是任意可行解
我们有
算法目标值的1+ε倍≥S^*对应的目标值
S^*是一个可行解
它对应的目标值为
其包含的物品收益v_i之和
因为v_i bar是对v_i向上取整
因此它≤对应的v_i bar之和
因为S为以v_i bar为收益时的最优解
因此上式≤S中物品对应的v_i bar之和
注意到 v_i bar≤v_i+θ
则上式≤S中物品对应v_i之和+nθ
由θ=εv_max/n
及算法得到的目标值≥v_max
我们得到 上式≤1+ε倍算法得到的目标值
命题得证
-1.1 Introduction
-1.2 A First Problem: Stable Matching
--A First Problem: Stable Matching
-1.3 Gale-Shapley Algorithm
-1.4 Understanding Gale-Shapley Algorithm
--Understanding Gale-Shapley Algorithm
-Homework1
-Lecture note 1
--Lecture note 1 Introduction of Algorithm
-2.1 Computational Tractability
-2.2 Asymptotic Order of Growth
-2.3 A Survey of Common Running Times
--A Survey of Common Running Times
-Homework2
-Lecture note 2
--Lecture note 2 Basics of Algorithm Analysis
-3.1 Basic Definitions and Applications
--Basic Definitions and Applications
-3.2 Graph Traversal
-3.3 Testing Bipartiteness
-3.4 Connectivity in Directed Graphs
--Connectivity in Directed Graphs
-3.5 DAG and Topological Ordering
--DAG and Topological Ordering
-Homework3
-Lecture note 3
-4.1 Coin Changing
-4.2 Interval Scheduling
-4.3 Interval Partitioning
-4.4 Scheduling to Minimize Lateness
--Scheduling to Minimize Lateness
-4.5 Optimal Caching
-4.6 Shortest Paths in a Graph
-4.7 Minimum Spanning Tree
-4.8 Correctness of Algorithms
-4.9 Clustering
-Homework4
-Lecture note 4
--Lecture note 4 Greedy Algorithms
-5.1 Mergesort
-5.2 Counting Inversions
-5.3 Closest Pair of Points
-5.4 Integer Multiplication
-5.5 Matrix Multiplication
--Video
-5.6 Convolution and FFT
-5.7 FFT
--FFT
-5.8 Inverse DFT
-Homework5
-Lecture note 5
--Lecture note 5 Divide and Conquer
-6.1 Weighted Interval Scheduling
--Weighted Interval Scheduling
-6.2 Segmented Least Squares
-6.3 Knapsack Problem
-6.4 RNA Secondary Structure
-6.5 Sequence Alignment
-6.6 Shortest Paths
-Homework6
-Lecture note 6
--Lecture note 6 Dynamic Programming
-7.1 Flows and Cuts
-7.2 Minimum Cut and Maximum Flow
--Minimum Cut and Maximum Flow
-7.3 Ford-Fulkerson Algorithm
-7.4 Choosing Good Augmenting Paths
--Choosing Good Augmenting Paths
-7.5 Bipartite Matching
-Homework7
-Lecture note 7
-8.1 Polynomial-Time Reductions
-8.2 Basic Reduction Strategies I
--Basic Reduction Strategies I
-8.3 Basic Reduction Strategies II
--Basic Reduction Strategies II
-8.4 Definition of NP
-8.5 Problems in NP
-8.6 NP-Completeness
-8.7 Sequencing Problems
-8.8 Numerical Problems
-8.9 co-NP and the Asymmetry of NP
--co-NP and the Asymmetry of NP
-Homework8
-Lecture note 8
--Lecture note 8 NP and Computational Intractability
-9.1 Load Balancing
-9.2 Center Selection
-9.3 The Pricing Method: Vertex Cover
--The Pricing Method: Vertex Cover
-9.4 LP Rounding: Vertex Cover
-9.5 Knapsack Problem
-Homework9
-Lecture note 9
--Lecture note 9 Approximation Algorithms
-10.1 Landscape of an Optimization Problem
--Landscape of an Optimization Problem
-10.2 Maximum Cut
-10.3 Nash Equilibria
-10.4 Price of Stability
-Homework10
-Lecture note 10
--Lecture note 10 Local Search
-11.1 Contention Resolution
-11.2 Linearity of Expectation
-11.3 MAX 3-SAT
-11.4 Chernoff Bounds
-Homework11
-Lecture note 11
--Lecture note 11 Randomized Algorithms
-Exam