zoukankan      html  css  js  c++  java
  • 应用运筹学基础:组合优化 (4)

    这一节课证明了 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) = egin{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$ 的权重总和,$ ext{FF}(I)$ 表示对实例 $I$ 运用 first fit 算法得到的目标函数值,$ ext{OPT}(I)$ 表示实例 $I$ 的最优目标函数值。

    再记 $B$ 为 first fit 算法得到的方案,$B^*$ 为最优方案,$c(B_j)$ 表示第 $j$ 个 bin 中物品的体积总和,$w(B_j)$ 表示第 $j$ 个 bin 中物品的权重总和。

    我们容易得到以下等式 $$w(I) = sumlimits_{i=1}^n w(a_i) = sumlimits_{j=1}^{ ext{FF}(I)}w(B_j) = sumlimits_{j=1}^{ ext{OPT}(I)}w(B^*_j)$$

    如果我们能证明 $forall c(B^*_j) le 1, w(B^*_j) le 1.7$,根据 $w(I) = sumlimits_{j=1}^{ ext{OPT}(I)}w(B^*_j)$,我们就能得到 $w(I) le 1.7 ext{OPT}(I)$;如果我们还能证明所有 $w(B_j)$ 的均值都至少为  1,那么根据 $w(I) = sumlimits_{j=1}^{ ext{FF}(I)}w(B_j)$,我们就能证明 $ ext{FF}(I) le w(I) le 1.7 ext{OPT}(I)$。不过我们这里要证明一个弱一点的结论:除了两个 bin 以外,其它 bin $w(B_j)$ 的均值都至少为  1。后面我们会看到,这个结论将会推导出 $ ext{FF}(I) le w(I) + 0.8 le 1.7 ext{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} imes 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}$,则 $$egin{matrix} & frac{6}{5}c(B_1) + v(B_2) \ ge & frac{6}{5}c(B_1) + 2 imes v(c') \ > & frac{6}{5}c(B_1) + frac{6}{5}(1 - c(B_1) - frac{1}{6}) \ = & 1end{matrix}$$

    假设 first fit 得到的方案中,权重之和小于 1 的 bin 按先后顺序为 $B_1, B_2, dots, B_k$,那么 $$egin{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 的证明。

  • 相关阅读:
    第13周学习进度情况
    【Android进阶】获取Android软件的版本信息
    【Android进阶】Android程序与JavaScript之间的简单调用
    字符串长度
    约瑟夫问题
    输入n个数和输出调整后的n个数
    输入三个整数,按由小到大的顺序输出
    学校oj平台上不去
    输入10个整数
    输入三个字符串,按由小到大的顺序输出
  • 原文地址:https://www.cnblogs.com/tsreaper/p/aop9.html
Copyright © 2011-2022 走看看