Skip to content

通过缩放构造 FPTAS

FPTAS via scaling · value scaling FPTAS

通过缩放并向下取整数值,把背包的伪多项式动态规划转为对输入规模与精度均多项式的方案。

条目类型
原则

形式陈述

从伪多项式算法出发

0/1 背包有物品 i=1,,n,重量 wi、价值 vi0 和容量 W。目标是在总重量不超过 W 时最大化总价值。按总价值做动态规划的时间取决于 ivi,对数编码输入下只是伪多项式。

FPTAS 给定 0<ε<1,在输入长度与 1/ε 的多项式时间内返回价值至少

(1ε)OPT

的可行解。缩放的目的不是让价值“看起来更小”,而是把 DP 状态数变成由 n/ε 控制。

选择可证明的缩放因子

先丢弃重量超过 W 的物品。令 Vmax 为剩余物品的最大价值;若没有正价值可行物品,空集就是最优解。否则单个最大价值物品可行,所以

VmaxOPT.

K=εVmaxn,vi=viK.

向下取整保证缩放值不会高估物品贡献。每个 vin/ε,故所有缩放价值之和至多 n2/ε

DP 接口与状态演化

Di[p] 表示前 i 个物品取得缩放总价值恰为 p 所需的最小重量。初始 D0[0]=0,其余为无穷大;转移为

Di[p]=min(Di1[p],Di1[pvi]+wi).

最后取满足 Dn[p]W 的最大 p,并沿父决策恢复物品集合。

状态范围 P=O(n2/ε),直接实现时间为 O(nP)=O(n3/ε),空间可用滚动数组降为 O(P);若要恢复解,则保存决策或采用重算策略。这个朴素界已经满足 FPTAS 定义,不需要为本原理引入更复杂优化。

直觉

缩放用每件至多 K 的价值损失换取有限的整数状态空间。最优解至多含 n 件物品,所以总舍入损失至多 nK;把 K 绑定到一个可证明不超过 OPT 的 Vmax,就能同时控制误差比例与 DP 表宽度,而不是凭经验删去价值精度。

价值缩放、DP 窄化与误差界
例子与边界

三件物品的可追踪例子

容量 W=5,物品 (wi,vi)

(4,10),(3,8),(2,6),

ε=1/4。此时 Vmax=10

K=(1/4)103=56,

缩放价值分别为 12,9,7

DP 发现第二、三件总重量 3+2=5,缩放总价值 9+7=16;第一件单独只有 12,因此返回后两件。其真实价值为 14。例子中它恰好是最优解,但 FPTAS 的一般保证只要求达到 (1ε)OPT

舍入损失证明

O 是最优物品集,算法返回 A。因为 DP 在缩放实例上最优且 O 仍满足重量约束,

iAviiOvi.

又因 Kvi/K>viK,有

iAviKiAviKiOvi>OPT|O|K.

使用 |O|nnK=εVmaxεOPT,得到

iAvi(1ε)OPT.

这一步解释了为什么必须给出 VmaxOPT 的下界关系。若随意以所有价值之和设 K,累计舍入损失可能大于 εOPT

舍入方向与数值模型

最大化价值时向下取整便于控制“每件少于 K”的损失。最小化问题若照搬同一方向,可能让低估成本的解看似更优,证明方向需要重新设计。价值为有理数时还要说明基本算术成本,不能在实数模型里默认无限精度操作是常数时间。

容量、重量无需按同一因子缩放;本构造保留原重量,因此返回解天然可行。若改为缩放重量,就必须另外处理容量超出或资源增广,保证形式会不同。

推论与应用

PTAS、FPTAS 与困难边界

PTAS只要求对每个固定 ε 多项式,指数可以依赖 1/ε;FPTAS 要求对 n1/ε 联合多项式。上面的 O(n3/ε) 明确满足后者。

0/1 背包是弱 NP-hard,并有依赖数值大小的伪多项式 DP,正适合缩放。对强 NP-hard 优化问题,通常不存在这种伪多项式起点;在常见整数目标与复杂度假设下,FPTAS 会导出精确多项式算法,因此除非 P=NP 不应期待同样套路。

参考资料
  • 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.
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具