形式陈述
从伪多项式算法出发
0/1 背包有物品 i = 1 , … , n ,重量 w i 、价值 v i ≥ 0 和容量 W 。目标是在总重量不超过 W 时最大化总价值。按总价值做动态规划 公理库 动态规划 Dynamic programming 在有限或良基的状态依赖上复用已计算结果的算法设计范式。 的时间取决于 ∑ i v i ,对数编码输入下只是伪多项式。
FPTAS 给定 0 < ε < 1 ,在输入长度与 1 / ε 的多项式时间内返回价值至少
( 1 − ε ) OPT 的可行解。缩放的目的不是让价值“看起来更小”,而是把 DP 状态数变成由 n / ε 控制。
选择可证明的缩放因子
先丢弃重量超过 W 的物品。令 V max 为剩余物品的最大价值;若没有正价值可行物品,空集就是最优解。否则单个最大价值物品可行,所以
V max ≤ OPT . 取
K = ε V max n , v i ′ = ⌊ v i K ⌋ . 向下取整保证缩放值不会高估物品贡献。每个 v i ′ ≤ n / ε ,故所有缩放价值之和至多 n 2 / ε 。
DP 接口与状态演化
令 D i [ p ] 表示前 i 个物品取得缩放总价值恰为 p 所需的最小重量。初始 D 0 [ 0 ] = 0 ,其余为无穷大;转移为
D i [ p ] = min ( D i − 1 [ p ] , D i − 1 [ p − v i ′ ] + w i ) . 最后取满足 D n [ p ] ≤ W 的最大 p ,并沿父决策恢复物品集合。
状态范围 P ′ = O ( n 2 / ε ) ,直接实现时间为 O ( n P ′ ) = O ( n 3 / ε ) ,空间可用滚动数组降为 O ( P ′ ) ;若要恢复解,则保存决策或采用重算策略。这个朴素界已经满足 FPTAS 定义,不需要为本原理引入更复杂优化。
直觉
缩放用每件至多 K 的价值损失换取有限的整数状态空间。最优解至多含 n 件物品,所以总舍入损失至多 n K ;把 K 绑定到一个可证明不超过 OPT 的 V max ,就能同时控制误差比例与 DP 表宽度,而不是凭经验删去价值精度。
图片加载失败 价值缩放、DP 窄化与误差界
例子与边界
三件物品的可追踪例子
容量 W = 5 ,物品 ( w i , v i ) 为
( 4 , 10 ) , ( 3 , 8 ) , ( 2 , 6 ) , 取 ε = 1 / 4 。此时 V max = 10 ,
K = ( 1 / 4 ) ⋅ 10 3 = 5 6 , 缩放价值分别为 12 , 9 , 7 。
DP 发现第二、三件总重量 3 + 2 = 5 ,缩放总价值 9 + 7 = 16 ;第一件单独只有 12,因此返回后两件。其真实价值为 14。例子中它恰好是最优解,但 FPTAS 的一般保证只要求达到 ( 1 − ε ) OPT 。
舍入损失证明
设 O 是最优物品集,算法返回 A 。因为 DP 在缩放实例上最优且 O 仍满足重量约束,
∑ i ∈ A v i ′ ≥ ∑ i ∈ O v i ′ . 又因 K ⌊ v i / K ⌋ > v i − K ,有
∑ i ∈ A v i ≥ K ∑ i ∈ A v i ′ ≥ K ∑ i ∈ O v i ′ > OPT − | O | K . 使用 | O | ≤ n 与 n K = ε V max ≤ ε OPT ,得到
∑ i ∈ A v i ≥ ( 1 − ε ) OPT . 这一步解释了为什么必须给出 V max ≤ OPT 的下界关系。若随意以所有价值之和设 K ,累计舍入损失可能大于 ε OPT 。
舍入方向与数值模型
最大化价值时向下取整便于控制“每件少于 K ”的损失。最小化问题若照搬同一方向,可能让低估成本的解看似更优,证明方向需要重新设计。价值为有理数时还要说明基本算术成本,不能在实数模型 公理库 实数系 Real number system · Ordered complete field 满足序域公理与上确界完备性的数系。 里默认无限精度操作是常数时间。
容量、重量无需按同一因子缩放;本构造保留原重量,因此返回解天然可行。若改为缩放重量,就必须另外处理容量超出或资源增广,保证形式会不同。
推论与应用
PTAS、FPTAS 与困难边界
PTAS 公理库 多项式时间近似方案 Polynomial-time approximation scheme · PTAS 对每个固定 ε>0 都在多项式时间内给出 1±ε 近似的算法族。 只要求对每个固定 ε 多项式,指数可以依赖 1 / ε ;FPTAS 要求对 n 和 1 / ε 联合多项式。上面的 O ( n 3 / ε ) 明确满足后者。
0/1 背包是弱 NP-hard,并有依赖数值大小的伪多项式 DP,正适合缩放。对强 NP-hard 优化问题,通常不存在这种伪多项式起点;在常见整数目标与复杂度假设下,FPTAS 会导出精确多项式算法,因此除非 P = N P 不应期待同样套路。
参考资料
Oscar H. Ibarra and Chul E. Kim, Fast Approximation Algorithms for the Knapsack and Sum of Subset Problems , Journal of the ACM, 1975.
Vijay V. Vazirani, Approximation Algorithms , Springer, 2001.
Hans Kellerer, Ulrich Pferschy and David Pisinger, Knapsack Problems , Springer, 2004.