1. 程式人生 > >應用運籌學基礎:組合優化 (4) - 近似算法選講 (2)

應用運籌學基礎:組合優化 (4) - 近似算法選講 (2)

得到 帶來 基礎 函數 its 都是 sum pac mat

這一節課證明了 bin packing 問題 first fit 算法的漸進比為 1.7。

均攤體積

如果有 $n$ 個物品,每個物品的體積都是 0.51,我們可以分析出最優目標函數值的下界至少約為 $n/2$。可是這個下界太松了(事實上最優目標函數值就是 $n$),只能用來證明近似比為 2。怎樣才能證明漸進比為 1.7 呢?

聰明的數學家們不知怎麽就想到了“均攤體積”的方法。設第 $i$ 件物品體積為 $a_i$,定義權重 $w(a_i)$ 如下:$$w(a_i) = \frac{6}{5}a_i + v(a_i)$$ 稱 $v$ 為 bonus,定義為:$$v(a_i) = \begin{cases} 0 & a_i \le \frac{1}{6} \\ \frac{3}{5}(a_i - \frac{1}{6}) & \frac{1}{6} < a_i \le \frac{1}{3} \\ \frac{1}{10} & \frac{1}{3} < a_i \le \frac{1}{2} \\ \frac{2}{5} & a_i > \frac{1}{2} \end{cases}$$

證明思路

記 $w(I)$ 為 bin packing 的一個實例 $I$ 的權重總和,$\text{FF}(I)$ 表示對實例 $I$ 運用 first fit 算法得到的目標函數值,$\text{OPT}(I)$ 表示實例 $I$ 的最優目標函數值。

再記 $B$ 為 first fit 算法得到的方案,$B^*$ 為最優方案,$c(B_j)$ 表示第 $j$ 個 bin 中物品的體積總和,$w(B_j)$ 表示第 $j$ 個 bin 中物品的權重總和。

我們容易得到以下等式 $$w(I) = \sum\limits_{i=1}^n w(a_i) = \sum\limits_{j=1}^{\text{FF}(I)}w(B_j) = \sum\limits_{j=1}^{\text{OPT}(I)}w(B^*_j)$$

如果我們能證明 $\forall c(B^*_j) \le 1, w(B^*_j) \le 1.7$,根據 $w(I) = \sum\limits_{j=1}^{\text{OPT}(I)}w(B^*_j)$,我們就能得到 $w(I) \le 1.7\text{OPT}(I)$;如果我們還能證明所有 $w(B_j)$ 的均值都至少為 1,那麽根據 $w(I) = \sum\limits_{j=1}^{\text{FF}(I)}w(B_j)$,我們就能證明 $\text{FF}(I) \le w(I) \le 1.7\text{OPT}(I)$。不過我們這裏要證明一個弱一點的結論:除了兩個 bin 以外,其它 bin $w(B_j)$ 的均值都至少為 1。後面我們會看到,這個結論將會推導出 $\text{FF}(I) \le w(I) + 0.8 \le 1.7\text{OPT}(I) + 0.8$,就能證明 first fit 算法 1.7 的近似比。

第一步:證明均攤體積不超過 1.7

第一步的證明比較容易,根據權重的定義可以直接推導出來。對於一個 bin,分以下情況討論。

1. 如果所有物品體積 $c$ 均有 $c \le \frac{1}{6}$

這個情況下,bin 的權重就是 bin 中物品體積總和的 1.2 倍,不會超過 1.7。

2. 如果存在物品體積 $c$ 有 $\frac{1}{6} < c \le \frac{1}{2}$

很顯然,這種物品在一個 bin 內至多有 5 個,那麽 bonus 不會超過 $\frac{1}{10} \times 5 = \frac{1}{2}$,權重也不會超過 1.7。

3. 如果存在兩個物品體積 $c_1$ 和 $c_2$ 有 $c_1 > \frac{1}{2}$ 且 $\frac{1}{3} < c_2 \le \frac{1}{2}$

很顯然,其它物品的體積都不會超過 $\frac{1}{6}$,沒有 bonus;$c_1$ 和 $c_2$ 帶來的 bonus 恰為 0.5,權重不會超過 1.7。

4. 如果存在三個物品體積 $c_1$,$c_2$ 和 $c_3$ 有 $c_1 > \frac{1}{2}$,$\frac{1}{6} < c_2, c_3 \le \frac{1}{3}$ 且 $c_2 + c_3 < \frac{1}{2}$

很顯然,其它物品的體積都不會超過 $\frac{1}{6}$,沒有 bonus;$c_2$ 和 $c_3$ 帶來的 bonus 為 $\frac{3}{5}(c_2 - \frac{1}{6}) + \frac{3}{5}(c_3 - \frac{1}{6}) < 0.1$,再加上 $c_1$ 帶來的 bonus 0.4,權重不會超過 1.7。

第二步:證明除兩個 bin 以外,其它 bin 權值均值至少為 1

我們首先去掉權值至少為 1 的 bin,考慮那些權值不足 1 的 bin。容易證明,權值不足 1 的 bin 有以下性質:

1. 不含體積至少為 0.5 的物品;

2. 一個 bin 內不會包含兩個體積至少為 1/3 的物品;

3. bin 的體積之和小於 5/6。

據此容易推出:

1. 除了最後一個 bin,其它 bin 中至少有兩個物品;

2. 除了最後兩個 bin,其它 bin 的體積之和都大於 2/3(如果有一個 bin 的體積之和不超過 2/3,由於是 first fit 算法,後面 bin 裏的物品體積肯定至少為 1/3 但不足 1/2;而後面至少還有兩個 bin,這就違反了“一個 bin 內不會包含兩個體積至少為 1/3 的物品”的性質)。

下面證明一個引理:如果兩個 bin $B_1$ 和 $B_2$ 滿足 $B_1$ 在 $B_2$ 前面、$w(B_1), w(B_2) < 1$、$c(B_1) \ge \frac{2}{3}$ 以及 $B_2$ 有至少兩個物品,則 $\frac{6}{5}c(B_1) + v(B_2) \ge 1$。

引理的證明,只需要分類討論 $B_2$ 裏體積最小的物品的體積 $c‘$ 即可:

首先,$c‘ \ge \frac{1}{6}$,不然 $B_1$ 將會與“bin 的體積之和小於 5/6”的性質矛盾;

其次,$ c‘ < \frac{1}{3}$,不然 $B_2$ 將會與“一個 bin 內不會包含兩個體積至少為 1/3 的物品”的性質矛盾;

另外,$c‘ > 1 - c(B_1)$,不然 $c‘$ 就會放進 $B_1$ 裏。

那麽只可能有 $\frac{1}{6} \le c‘ < \frac{1}{3}$,則 $$\begin{matrix} & \frac{6}{5}c(B_1) + v(B_2) \\ \ge & \frac{6}{5}c(B_1) + 2 \times v(c‘) \\ > & \frac{6}{5}c(B_1) + \frac{6}{5}(1 - c(B_1) - \frac{1}{6}) \\ = & 1\end{matrix}$$

假設 first fit 得到的方案中,權重之和小於 1 的 bin 按先後順序為 $B_1, B_2, \dots, B_k$,那麽 $$\begin{matrix} & w(B_1) + w(B_2) + \dots + w(B_{k-2}) + w(B_{k-1}) + w(B_k) \\ = & v(B_1) + (\frac{6}{5}c(B_1) + v(B_2)) + \dots + (\frac{6}{5}c(B_{k-2}) + v(B_{k-1})) + (\frac{6}{5}c(B_{k-1}) + \frac{6}{5}c(B_k)) + v(B_k) \\ \ge & (k-2) + \frac{6}{5} \end{matrix}$$ 也就是說,除了最後兩個 bin,其它的 bin 權值均值都至少為 1。再補個 0.8,再加上權值本來就至少為 1 的 bin,那麽所有的 bin 權值均值就都至少為 1 了。這就完成了漸進比為 1.7 的證明。

應用運籌學基礎:組合優化 (4) - 近似算法選講 (2)