近似算法第二讲,主要讲了基于组合优化和贪心选择的近似算法,又主要以子集覆盖这个题目为重点。

序言:一上课老师好像很没有精神啊…应该是很难受,然后喝了点水之后开始讲。当时觉得好压抑啊,一下子觉得,老师生病影响讲课啦,一定要串课啊[哈哈][哈哈]。还是觉得不应该自己勉强自己,自己难受,别人知道了也会很难受的。当然啦,自己要是能够装着OK,那也不错的!当然不是在责怪老师啦,其实很感动啦 不过已经过了无脑感动的年纪了。

基于组合优化的近似算法

包含3个问题,分别是 顶点覆盖问题 , 装箱问题 和 旅行商问题。以下分别叙述。

  1. 顶点覆盖 (The Vertex-cover Problem )

    问题描述:

    输入: 一个图 G(V,E)

    输出:一个顶点集合C , 该集合C满足两个条件:(1) 该集合中的顶点能够覆盖所有的边。(2)满足条件1的最小点集合。

    可以形式化的描述条件1:

    $\forall (u , v ) \in E , u \in C $或者 $ v \in C$ 或者 $ \{ u , v \} \supseteq C $

    已经证明,这是一个NP完全问题。

    我们基于组合优化给出近似算法:

    近似算法描述:

    1. 任取图中一条边,将边中的两个顶点放入集合C中

    2. 将两个顶点所能cover的所有边从图中去掉

    3. 如果边不为空, 重复1

    近似算法近似度: Ratio Bound = 2

    证明关键:

    1. 设每次选择的边构成的集合为A , A中的边必然是不邻接的 —— 因为每次找到一条边后,都把边的两个顶点所能cover的边全部去掉了,即去掉了所有邻接边。故以后加入的都不可能与其邻接。不邻接的结果就是,每条边的顶点都不会相同。

      由上,我们知最后近似解的集合C与选择的边机A的大小关系: $|C| = 2 |A|$ 。

    2. 再考虑优化解集合$C^*$ , 优化解是cover所有边的,所以必然cover边集合A;

      又A中顶点都不相同,则A中每条边的顶点,至少有一个在$C^*$中。

      即满足关系: $|A| \le |C^* \ $
    3. 由上,通过A ,就找到了优化解与近似解的关系,满足$\frac{|C|}{|C^*|} \le 2$

      ratio bound = 2

  2. 装箱问题 (Bin-Packing Problem)

    问题描述:

    输入: (1) 体积依次为$a_1 , a_2 , \cdots , a_n \in (0,1]$的n个物品 (2) 无穷个体积为1的箱子

    输出: 装箱方案,使所需箱子数最少

    装箱问题是注明的NP完全问题。

    实例: 将n中奖券印刷到一些具有标准尺寸的纸张上。归一化后就是装箱问题。

    近似算法:

    First-Fit算法:

    1. 依次处理每个物品

    2. 对每个物品,从前往后找已经装了东西的箱子,如果找到能够放下的箱子,则放入,更新箱子剩余容量;如果都找不到,则新开一个箱子放该物品。

    近似比: ratio bound = 2

    证明关键:

    1. 设优化解需要箱子个数为$k^*$ 。

      优化解中需要的箱子数,与所有物品的体积和,必然满足: $k^* \ge \sum_{i=1}^{n}a_i$

    2. 近似解需要的箱子数为$k$ 。

      由鸽洞原理,近似解中,至少$k-1$个箱子是超过半满的! 否则,两个未超过半满的箱子物品可以合在一起。

      则 $\frac{1}{2}(k-1)$是小于这$k-1$个箱子装的物品体积的,则也必然小于所有物品的体积,即有

      $\frac{1}{2}(k-1) \lt \sum_{i=1}^{n}a_i$

    3. 由所有物品的体积和这一个桥梁,找到优化解与近似解的关系: $\frac{1}{2}(k-1) \lt k^*$

      求出的实际结果为 : $\frac{k}{k^*} \lt 2 + \frac{1}{k^*}$ , 这里似乎直接忽略了后面的$\frac{1}{k^*}$项,取2。

      故ratio bound = 2

  3. 旅行商问题(The Traveling-Salesman Problem , TSP)

    问题描述:

    输入 : 一个完全无向图$G(V , E)$ ; 代价函数$C : E \to $ 非负整数集合 , C满足三角不等式: $C(u,v) le C(u,w) + C(w , v)$

    输出 : 具有最小代价的哈密顿环。

    哈密顿环,就是不重复经过所有顶点一次回到起点的环。

    不满足三角不等式的TSP问题不存在具有常数Ratio Bound的近似算法,除非 NP=P 。

    TSP问题是组合优化中一个NP-H问题,是NP完全问题。TSP在企划、物流、芯片制造中都有应用。可以使用线性优化来表示即求解。(即为每条边的权值乘以一个0/1系数,是该表达式最小。)

    近似算法:

    1. 首先在完全无向图上选择一个起点,构建一个最小生成树。

    2. 先序遍历最小生成树,得到遍历序列。

    3. 按此序列访问,并最终回到起点,该路径即是TSP的近似解。

    近似比: Ratio Bound = 2

    证明关键:

    1. 从优化解$H^*$中去掉一条边,即得到一颗生成树$T^*$,该生成树代价必然大于等于最小生成树$T$代价。即

      $C(T) \le C(T^*) \lt C(H^*)$

    2. 定义一个关于最小生成树的fullwalk,即在先序遍历最小生成树时,第一次访问节点和栈回退时的访问都算上,则该fullwalk W 代价为$C(W) = 2C(T)$ (因为会每条边会访问两次。)

    3. 我们将先序遍历的序列变为哈密顿环,即近似解$H$,就是将fullwalk的回退路径变为直线到达,连续应用三角不等式即可。即

      $C(H) \le C(W) $

    4. $C(H) \le 2C(T) \lt 2C(H^*)$ , 即 $\frac{C(H)}{C^*} \lt 2$

基于贪心选择的近似算法

  1. 最小并行时间调度问题 (Minimun Makespan Scheduling)

    输入: 计算时间分别为$t_1 , \cdots , t_n$的n个任务; m台相同的机器。

    输出: 最少并行时间。

    是一个NP完全问题。

    贪心思想: 每次选择具有最短任务队列的机器放入任务。

    算法:

    1. 依次分配任务1到n

    2. 每次选择队列时间最短的机器,放入该任务,更新该机器的队列时间。

    近似比: Ratio Bound = 2

    证明关键:

    1. 优化解并行时间$T^* \ge \frac{1}{m} \sum_{i=1}^{n}t_i$ ,且

      $T^* \ge t_i , i = 1 , \cdots , n$

      的确是如此的。

    2. 设近似解$T$中最后一个任务为$t_h$,将会在第$j$台机器上执行。设其起始时间为$T_{start}$ , 则近似解并行时间$T = T_{start} + t_h$ 。 其中$T_{start}$满足关系

      $T_{start} \le \frac{1}{m} ( \sum_{i=1}^{n} t_i - t_h )$

      则 $T \ge \frac{1}{m}( mT^* - T^* ) + T^*= 2T^* - \frac{1}{m} T^*$

      为什么$T_{start}$满足这个关系: 因为$t_h$开始时其他任务还没有结束或者极端情况下同时结束,且这段时间内机器全部是连续处理没有空闲,故并行的起始时间是满足上述关系的。

  2. 集合覆盖

    问题描述:

    输入: 集合X ;集合X的子集族F。

    输出:集族$C \subseteq F$,使得(1)$X = \cup_{S \in C}S$ (2)$|C|$最小

    最小集合覆盖问题是很多实际问题的抽象。该问题是NP完全问题。

    贪心选择: 每次选择能够包含未被覆盖元素最多的子集。

    近似算法:

    1. 初始化包含所有未覆盖点的集合U,初始化近似解C

    2. 从子集族F中选择子集S , 使得 $S \cap U$最大

    3. 将子集S添加到C中,从U中减去$S \cap U$

    近似比: Ratio Bound 是$p(n)$的多项式近似算法,$p(n) = H(~ max({|S| | S \in F }) ~)$ , 其中$H(d) = \sum_{i=1}^{d}\frac{1}{i}$ (推论: 由不等式$H(d) \le \ln(d) $ , 有 H(max({|S| | S \in F})) \le H(|X|) \le \ln |X| + 1)

    即是求近似解中包含的子集中,元素最多的集合的元素个数X,求其H(X)值。

    证明 :

    没有看太明白。

  3. 边不相交路径覆盖问题

    问题描述:

    输入 : 图$G(V , E)$ , 源点集$S \subseteq V$ ,汇点集$ T\supseteq V$

    输出 : $A \subseteq S \times T $ , 满足(1)A中所有顶点对在G中存在无公共边的路径;(2)A最大。

    NP完全问题。

    贪心思想:每次选择$(u , v ) \in S \times T $使得该顶点对间路径最短。

    近似算法:

    1. 初始全部候选解集合 $ C = S \times T$ , 初始近似解集合$A = \emptyset$

    2. 从C中算出所有顶点对在图G中的最短路径集合P

    3. 从P中选择具有最小值的路径对应的顶点对$(u , v)$,将顶点对加入到A,将路径从G中移除。重复2,直到G中不再连通。

    则求得的A即为近似解。

    近似比:Ratio Bound 为 $O(\sqrt(m))$ , 其中m为G中边数,即$m = |E|$

    证明:

    没有看太明白。