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

    这一节课讲解了被称为独立系统的一类问题,以及用贪心解决独立系统问题的近似比。

    独立系统

    考虑一个有限元素集合 $E$,给 $E$ 中的每个元素 $e$ 定义一个非负的费用 $c(e)$。再考虑 $mathcal{F} in 2^E$,那么对于 $F in mathcal{F}$,我们定义 $F$ 的费用 $c(F) = sumlimits_{e in F} c(e)$。现在我们要找出一个 $F$,使得 $c(F)$ 最大(或最小)。这就是这节课我们需要考虑的一类问题。

    独立系统

    从这类问题中,我们引入独立系统的概念。对于一个二元组 $(E, mathcal{F})$,若 $forall Y in mathcal{F}$,$X subseteq Y o X in mathcal{F}$,那么我们称 $(E, mathcal{F})$ 为独立系统。由这个定义我们马上推出,$emptyset in mathcal{F}$。

    独立集与相关集

    在独立系统 $(E, mathcal{F})$ 中,$mathcal{F}$ 中的元素称为独立集,$E - mathcal{F}$ 中的元素称为相关集。

    基与圈

    我们将 $mathcal{F}$ 中的极大独立集称为基,将 $E - mathcal{F}$ 中的极小相关集称为圈。

    对于 $X subseteq E$,定义 $X$ 上的基为 $X$ 中的极大独立集。

    秩商

    对于 $X subseteq E$,$X$ 中的基大小可能不同。我们定义 $X$ 的秩 $r(X)$ 为 $X$ 中最大的基的大小,类似地定义 $X$ 的下秩 $ ho(X)$ 为 $X$ 中最小的基的大小。

    由此定义独立系统的秩商 $q(E, mathcal{F}) = minlimits_{x subseteq E} quad frac{ ho(X)}{r(X)}$。秩商是一类问题中贪心解法近似比的下界,下面会进行说明。

    一类最大(小)化问题

    根据独立系统的定义,我们引出一类最大(小)化问题。

    最大化问题:给出一个独立系统 $(E, mathcal{F})$,找出一个 $F in mathcal{F}$,使得 $c(F)$ 最大。

    很显然,由于每个元素的费用都是非负的,所以 $|F|$ 越大,$c(F)$ 也越大。所以最优的 $F$ 一定是基。

    最小化问题:给出一个独立系统 $(E, mathcal{F})$,找出一个 $F in mathcal{F}$,使得 $F$ 是基,且 $c(F)$ 最小。

    (如果不要求 $F$ 是基,那么取 $F = emptyset$ 就会让代价最小,没什么意义...)

    最大化问题的实例有很多。

    0-1 背包问题:$E$ 中的元素是每个物品,$mathcal{F}$ 中的元素是所有可以放进背包的物品集合,费用就是物品的价值。

    最大权独立集:$E$ 中的元素是点,$mathcal{F}$ 中的元素是独立集,费用就是每个点的权值。

    最长简单路径:$E$ 中的元素是边,$mathcal{F}$ 中的元素是所有从起点到终点的简单路径以及其子集,费用就是每条边的距离。

    最大权森林:$E$ 中的元素是边,$mathcal{F}$ 中的元素是所有不含圈的边集,费用就是每条边的权值。

    最小化问题也有很多实例。

    最小生成树:$E$ 中的元素是边,$mathcal{F}$ 中的元素是所有不含圈的边集,费用就是每条边的权值。

    最短路:$E$ 中的元素是边,$mathcal{F}$ 中的元素是所有从起点到终点的简单路径以及其子集,费用就是每条边的距离。

    旅行商问题(TSP):$E$ 中的元素是边,$mathcal{F}$ 中的元素是哈密尔顿回路及其子集,费用就是每条边的距离。

    拟阵

    拟阵(matroid)是一个特殊的独立系统。一个独立系统需要满足以下三个条件中的一个才被称为是拟阵(事实上以下三个条件等价):

    (1) 若 $X, Y in mathcal{F}$,且 $|X| > |Y|$,则 $exists e in X - Y$,$Y cup {e} in mathcal{F}$;

    (2) 若 $X, Y in mathcal{F}$,且 $|X| = |Y| + 1$,则 $exists e in X - Y$,$Y cup {e} in mathcal{F}$;
    (3) $forall X subseteq E$,$X$ 的所有基大小相同。

    接下来说明这三个条件等价。

    (1) 推出 (2) 是显然的,(2) 推出 (1) 使用归纳法即可。

    (1) → (3):假设存在 $X, Y in mathcal{F}$,$X$ 与 $Y$ 都是基,且 $|X| > |Y|$。那么 $exists e in X - Y$,$Y cup {e} in mathcal{F}$,说明 $Y$ 不是基。矛盾。
    (3) → (1):假设存在 $X, Y in mathcal{F}$,$|X| > |Y|$,且 $forall e in X - Y$,$Y cup {e} otin mathcal{F}$,那么说明 $Y$ 是基。由于 $X$ 是独立集,存在一个基 $Z$ 使得 $|Z| ge |X| > |Y|$,那么有两个基 $Y$ 与 $Z$ 大小不同。矛盾。

    我们另外定义 $mathcal{F}^* = {F subseteq E quad | quad exists (E, mathcal{F}) ext{ 的基 } B, F cap B = emptyset}$。

    很容易发现,$(E, mathcal{F}^*)$ 也是独立系统。我们称 $(E, mathcal{F})$ 与 $(E, mathcal{F}^*)$ 互为对偶。

    下面证明 $F in mathcal{F}^{**} o F in mathcal{F}$:

    首先,由 $F in mathcal{F}^{**}$ 可以推出 $exists (E, mathcal{F^*}) ext{ 的基 } B_1, F cap B_1 = emptyset$。

    又可以推出 $exists (E, mathcal{F}) ext{ 的基 } B_2, B_1 cap B_2 = emptyset$。

    注意到 $B_1 cup B_2 = E$,否则我们可以从 $E - (B_1 cup B_2)$ 中选出一个元素加入 $B_1$,仍有 $B_1 cap B_2 = emptyset$,那 $B_1$ 就不是基了。

    既然 $B_1 cup B_2 = E$,且 $F cap B_1 = emptyset$,那么只能有 $F subseteq B_2$。根据独立系统的定义,有 $F in mathcal{F}$。

    反过来也是成立的,证明类似就略去。

    两类贪心算法

    下面介绍两类贪心算法,分别用于独立系统的最大化和最小化问题。

    Best in:将 $E$ 中所有元素按费用从大到小排序,使得 $c(e_1) ge c(e_2) ge ... ge c(e_n)$。一开始令 $F = emptyset$,按 $e_1, e_2 dots, e_n$ 的顺序考虑,若 $e_i$ 加入 $F$ 后 $F$ 仍是独立集那就加入。这个贪心算法用于解决最大化问题。

    Worst out:将 $E$ 中所有元素按费用从大到小排序,使得 $c(e_1) ge c(e_2) ge ... ge c(e_n)$。一开始令 $F = E$,按 $e_1, e_2 dots, e_n$ 的顺序考虑,若把 $e_i$ 从 $F$ 中去掉后 $F$ 还含有至少一个基那就去掉。这个贪心算法用于解决最小化问题。

    接下来介绍重要的 Best in 定理:设 $G(E, mathcal{F})$ 表示 best in 贪心得到的解,$ ext{OPT}(E, mathcal{F})$ 表示最优解,则 $$q(E, mathcal{F}) le frac{G(E, mathcal{F})}{ ext{OPT}(E, mathcal{F})} le 1$$ 从这个定理可以看出,如果一个独立系统是拟阵,那么用 best in 得到的最大化问题的解一定是最优解。

    下面证明 Best in 定理:

    首先定义 $E_j = {e_1, e_2, dots, e_n}$,$G_n$ 是 best in 贪心选中元素的集合,$O_n$ 是最优解选中元素的集合。令 $G_j = E_j cap G_n$ 表示 best in 贪心在考虑 $e_j$ 之后选择了哪些元素,$O_j = E_j cap O_n$ 表示最优解在考虑 $e_j$ 之后选择了哪些元素。记 $d_j = c(e_j) - c(e_{j+1})$ 以及 $d_n = c(e_n)$,那么 $$egin{matrix} c(G_n) & = & sumlimits_{j=1}^n(|G_j| - |G_{j-1}|)c(e_j) \ & = & sumlimits_{j=1}^n|G_j|d_j \ & ge & sum_{j=1}^n ho(E_j)d_j & ext{(因为容易证明 } G_j ext{ 是 } E_j ext{ 的一个极大独立集)} \ & ge & q(E, mathcal{F})sumlimits_{j=1}^n r(E_j)d_j & ext{(根据秩商的定义)} \ & ge & q(E, mathcal{F})sumlimits_{j=1}^n |O_j|d_j \ & = & q(E, mathcal{F})c(O_n) end{matrix}$$ 这就证明了 Best in 定理。

    可以举一个例子说明 Best in 定理的下界是紧的:根据秩商的定义,$exists X subset E$,$X$ 的基 $B_1$ 和 $B_2$ 满足 $frac{|B_1|}{|B_2|} = q(E, mathcal{F})$。我们定义 $$c(e) = egin{cases} 1 & e in X \ 0 & e otin X end{cases}$$ 然后把 $B_1$ 中的元素排在前面形成 $e_1, e_2, dots, e_{|B_1|}$,后面随便排。如果使用 best in 贪心,就会把前面 $|B_1|$ 个元素选走,然而最优解可以选 $|B_2|$ 个元素。

    另外还有两个奇怪的定理,上课提了一下...

    Worst out 定理:使用 worst out 贪心得到的解满足 $$1 le frac{G(E, mathcal{F})}{ ext{OPT}(E, mathcal{F})} le maxlimits_{F subseteq E} quad frac{|F| - ho^*(F)}{|F| - r^*(F)}$$ 其中 $ ho^*(F)$ 表示对偶独立系统中的下秩,$r^*(F)$ 表示对偶独立系统中的秩。

    $n$ 个拟阵的交:$n$ 个拟阵的交,用贪心得到的解近似比为 $frac{1}{n}$。

  • 相关阅读:
    C# Sleep延时方法
    浅谈模糊测试
    python time模块常用方法小结
    Markdown使用小结
    关于测试用例设计、评审及用例质量评估的思考
    关于评估软件产品质量的思考
    关于软件测试工程师进阶提升的思考
    关于软件测试中回归测试的思考
    测试技术的思考 ---- 读《微软的软件测试之道》有感系列
    vue-learning:22
  • 原文地址:https://www.cnblogs.com/tsreaper/p/aop7.html
Copyright © 2011-2022 走看看