要证明背包问题没有多项式时间绝对近似算法,需要使用反证法。假设存在一个多项式时间的绝对近似算法 A,可以对任意的背包问题求解出一个近似解 S。我们将证明这个假设会导致矛盾,从而证明背包问题没有多项式时间绝对近似算法。

首先,我们假设问题的最优解为 OPT,算法 A 求出的近似解为 S。那么我们可以得到下面的不等式:

S ≤ c * OPT

其中 c 是一个常数,表示算法 A 的近似比。我们假设算法 A 的近似比为 1-ε,其中 ε 是一个小于 1 的正数,即:

S ≤ (1 - ε) * OPT

我们可以把 ε 看作是一个足够小的数,因此我们可以认为 S 和 OPT 非常接近。如果算法 A 的近似比越高,那么 S 和 OPT 之间的差距就越小。

接下来,我们考虑如何利用算法 A 求解出一个规模更大的背包问题。我们可以把原来的背包问题扩展为一个更大的问题,例如把原来的物品数量 n 扩展为 2n,容量也扩大为原来的 2 倍。我们假设算法 A 可以在多项式时间内求解这个更大的背包问题,并得到一个近似解 S'。

我们可以把 S' 分成两部分,前 n 个物品和后 n 个物品。我们假设前 n 个物品的总价值为 V1,总重量为 W1,后 n 个物品的总价值为 V2,总重量为 W2。由于容量扩大了 2 倍,因此 W1 和 W2 都小于等于原来的容量 C。因此我们可以得到下面的不等式:

W1 + W2 ≤ 2C

V1 + V2 ≤ 2 * (1-ε) * OPT

现在我们考虑如何把 S' 转换成一个近似解 S'',使得 S'' 和 OPT 之间的差距更小。我们可以把 S'' 定义为 S' 中前 n 个物品和后 n 个物品中较优的那个部分。也就是说,如果 V1/W1 > V2/W2,那么 S'' 就是前 n 个物品,否则 S'' 就是后 n 个物品。

我们可以得到下面的不等式:

S'' ≥ max(V1, V2)

S'' ≤ c * max(V1, V2)

其中 c 是算法 A 的近似比。因此我们可以得到下面的不等式:

S'' ≤ c * (V1 + V2) / 2

S'' ≤ (1-ε) * c * OPT

接下来我们考虑如何利用算法 A 求解出一个更大的背包问题,例如把原来的物品数量扩展为 4n,容量扩大为 4 倍。我们假设算法 A 可以在多项式时间内求解这个更大的背包问题,并得到一个近似解 S'''。

我们可以把 S''' 分成四个部分,每个部分包含 n 个物品。我们假设这四个部分分别是 S1, S2, S3 和 S4。由于容量扩大了 4 倍,因此每个部分的重量都小于等于原来的容量 C。我们可以得到下面的不等式:

W1 + W2 + W3 + W4 ≤ 4C

V1 + V2 + V3 + V4 ≤ 4 * (1-ε) * OPT

现在我们考虑如何把 S''' 转换成一个近似解 S'''',使得 S'''' 和 OPT 之间的差距更小。我们可以把 S'''' 定义为 S''' 中四个部分中较优的那个部分。也就是说,S'''' 是 S1, S2, S3 和 S4 中价值最大的那个部分。

我们可以得到下面的不等式:

S'''' ≥ max(V1, V2, V3, V4)

S'''' ≤ c * max(V1, V2, V3, V4)

因此我们可以得到下面的不等式:

S'''' ≤ c * (V1 + V2 + V3 + V4) / 4

S'''' ≤ (1-ε) * c * OPT

我们可以继续重复这个过程,把背包问题的规模扩展为 8n、16n、32n……直到规模达到 2^k * n。我们可以得到下面的不等式:

S^(2^k) ≤ (1-ε) * c * OPT

其中 S^(2^k) 表示求解出的近似解,规模为 2^k * n 的背包问题。我们可以让 k 足够大,使得 S^(2^k) 和 OPT 之间的差距非常小。例如,当 k 足够大时,我们可以得到下面的不等式:

S^(2^k) ≤ OPT + ε * OPT

但是根据我们的假设,算法 A 是一个多项式时间的绝对近似算法,因此 S^(2^k) 可以在多项式时间内计算出来。这意味着我们可以在多项式时间内求解背包问题,并得到一个近似比非常接近于 1 的解。这与 P≠NP 的假设矛盾,因此我们的假设不成立。

因此,我们可以得出结论:背包问题没有多项式时间绝对近似算法,除非 P=NP。


原文地址: https://www.cveoy.top/t/topic/oHOd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录