算法分析与设计之近似算法


  • 💂 个人主页:风间琉璃
  • 🤟 版权: 本文由【风间琉璃】原创、在优快云首发、需要转载请联系博主
  • 💬 如果文章对你有帮助欢迎关注点赞收藏(一键三连)订阅专栏

前言

提示:这里可以添加本文要记录的大概内容:


一、负载均衡

问题描述:有m台相同机器,n个任务,任务j的处理时间为 t j t_j tj,每个任务只能在一台机器上连续工作,一台机器同一时间只能处理一个任务。将完成最后一个任务所需的时间为负载时间,希望能够让这个负载时间最短。负载均衡是NP-Hard问题,因为分割问题可以归约到负载均衡问题。

J(i) 表示分配给机器 i 的任务子集。

机器i的负载(即总处理时间)为 L i = ∑ j ∈ J ( i ) t j L_i = \sum_{j \in J(i)} t_j Li=jJ(i)tj

最大负载(makespan)是所有机器中最大的负载,即: L ∗ = max ⁡ i L i L^* = \max_i L_i L=maxiLi

引理:

  • L ∗ ≥ m a x ( t j ) L^* \geq max(t_j) Lmax(tj),最优负载时间大于等于完成最长任务的工作所需时间。
  • L ∗ ≥ ( 1 / m ) ∑ t j L^* \geq (1/m) \sum t_j L(1/m)tj,最优负载时间大于等于所有任务的平均时间。

1.1 List-Scheduling贪心算法

List-Scheduling 是一种贪心策略,其核心思想是将各个工作依次(无排序)安排到累计工作时长最短的机器中。

image-20241102162026409

该贪心算法是一个2倍近似算法。证明如下:

L i L_i Li为瓶颈机器i的负载(即所有机器中负载最大的机器)。设j是最后分配到机器i的任务。

根据贪心算法的步骤,当最后一个任务j被分配到机器i时,机器i的负载是所有机器中最小的。因此,分配任务j前,机器i的负载满足:
L i − t j ≤ L k 对于所有  1 ≤ k ≤ m L_i - t_j \leq L_k \quad \text{对于所有 } 1 \leq k \leq m LitjLk对于所有 1km
因为左侧机器i的 L i L_i Li负载时间都小于所有的机器的负载时间 L k L_k Lk,则也肯定小于m个机器负载的平均时间,即 L i − t j ≤ ( 1 / m ) ∑ K L k = ( 1 / m ) ∑ k t k L_i - t_j \leq (1/m) \sum_K L_k = (1/m) \sum_k t_k Litj(1/m)KLk=(1/m)ktk。 由第二个引理有 L i − t j ≤ L ∗ L_i - t_j \leq L^* LitjL。又最终分配到机器i的任务j的处理时间 t j t_j tj 满足 t j ≤ L ∗ t_j \leq L^* tjL(引理1)。因此,机器i的负载满足:
L i = ( L i − t j ) + t j ≤ L ∗ + L ∗ = 2 L ∗ L_i = (L_i - t_j) + t_j \leq L^* + L^* = 2L^* Li=(Litj)+tjL+L=2L

image-20241102170523907

1.2 LPT Rule

LPT Rule算法先将任务按处理时间降序排序(与前面贪心算法的唯一区别),然后将每一个任务依次安排到负载最小的机器。

image-20241102170627277

引理 3:如果任务数量n > m,则最优解的最大负载 L ∗ L^* L 至少为 2 t m + 1 2t_{m+1} 2tm+1,其中 t m + 1 t_{m+1} tm+1 是任务列表中第m+1大的任务处理时间。

考虑前m+1个任务 t 1 , t 2 , … , t m + 1 t_1, t_2, \ldots, t_{m+1} t1,t2,,tm+1。由于这些任务按照降序排列,显然每个任务的处理时间至少为 t m + 1 t_{m+1} tm+1
由于有m+1个任务和m台机器,根据鸽巢原理,至少有一台机器将分配到两个任务。因此,至少有一个机器的负载会达到至少 t m + 1 t_{m+1} tm+1加上另一个任务的处理时间。于是,有: L ∗ ≥ 2 t m + 1 L^* \geq 2t_{m+1} L2tm+1

证明:

设机器i的最终负载为 L i L_i Li。对于最后一个任务 t j t_j tj,根据 LPT 规则,它被分配到负载最小的机器上,因此:$L_i - t_j \leq L^* $

因为 LPT 规则按任务的降序分配,因此最后任务的处理时间 t j ≤ t m + 1 t_j \leq t_{m+1} tjtm+1,又由引理3有 t j ≤ ( 1 / 2 ) L ∗ t_j \leq (1/2)L^* tj(1/2)L
L i = { L i − t j } + t j ≤ L ∗ + ( 1 / 2 ) L ∗ ≤ ( 3 / 2 ) L ∗ L_i = \{L_i -t_j\} + t_j \leq L^* + (1/2)L^* \leq (3/2)L^* Li={Litj}+tjL+(1/2)L(3/2)L

二、带权值点覆盖

给定一个带权无向图 G=(V,E),每个顶点 v∈V有一个非负权值 w(v)。需要找到一个顶点集合 C⊆V,使得:

  1. C是一个点覆盖,即对于每一条边 (u,v)∈E,至少有 u∈C 或 v∈C;
  2. C的权值和 ∑ v ∈ C w ( v ) \sum_{v \in C} w(v) vCw(v)最小。

这是一个经典的优化问题,属于 NP 困难问题

2.1 竞价法

输入:图 G=(V, E),权重向量 w
初始化:把所有的边的价格都初始化为0, p e = 0 p_e=0 pe=0
迭代定价:在以下条件成立时不断迭代:存在至少一条边e=(i,j),其两个端点i和j均未"紧致"(顶点所有边的价格之和等于顶点的权值)

循环体:选择这条边e,不断的增加它的价格 p e p_e pe,直到其中一个端点变得紧致。
最后把所有紧致的顶点加入到集合 S 中。

返回 S。

image-20241123215106953

首先初始化所有的边的价格为0,然后通过为每条边设置价格,逐步增加价格以支付其两个端点之一的覆盖费用,直到某个端点的累积价格等于其权重(称为“紧致”)。一旦顶点紧致,它就被选入顶点覆盖集合。算法确保所有边都被覆盖,同时总价格不超过顶点覆盖的权重。最终返回的顶点集合是一个权重不超过最优解两倍的近似解,如下图所示。

image-20241124093857187

公平性(Fairness):每个顶点i的所有相邻边支付的总价格不能超过顶点的权重 w i w_i wi,即: ∑ e = ( i , j ) p e ≤ w i \sum_{e =(i,j)} p_e \leq w_i e=(i,j)pewi

引理:对于任意顶点覆盖S和任意满足公平性条件的价格 p e p_e pe,以下不等式成立: ∑ e ∈ E p e ≤ w ( S ) \sum_{e \in E} p_e \leq w(S) eEpew(S)

其中:

  • w ( S ) = ∑ i ∈ S w i w(S) = \sum_{i \in S }w_i w(S)=iSwi,表示点覆盖S的权重和。
  • ∑ e ∈ E p e \sum_{e \in E} p_e eEpe表示所有边支付的总价格。
image-20241123214322427 image-20241123214610418

2倍近似算法的证明:

核心思路:将点覆盖中的顶点的所相邻的 缩放 到集合V中顶点所相邻的,然后相当于每条边计算了2次。

image-20241123222320173

2.2 ILP整数规划

整数规划模型:

  1. 决策变量

    用一个 0/1 决策变量 x i x_i xi表示顶点i是否被包含在集合S中:
    x i = { 1 如果顶点  i  被选入集合  S , 0 如果顶点  i  未被选入集合  S . x_i = \begin{cases} 1 & \text{如果顶点 } i \text{ 被选入集合 } S, \\ 0 & \text{如果顶点 } i \text{ 未被选入集合 } S. \end {cases} xi={10如果顶点 i 被选入集合 S,如果顶点 i 未被选入集合 S.
    决策变量 x i x_i xi是二元变量: x i ∈ { 0 , 1 } , ∀ i ∈ V x_i \in \{0, 1\}, \quad \forall i \in V xi{0,1},iV

  2. 目标函数

    优化目标是最小化顶点集合 S的总权重,最小化被选顶点的总权重: minimize  ∑ i ∈ V w i x i \text{minimize } \sum_{i \in V} w_i x_i minimize iVwixi

  3. 约束条件

    确保每条边e = (i, j)至少有一个端点被选择 x i + x j ≥ 1 , ∀ ( i , j ) ∈ E x_i + x_j \geq 1, \quad \forall (i, j) \in E xi+xj1,(i,j)E。这表示每条边必须被顶点覆盖。

    image-20241124094821930

结论:

  • 如果 x ∗ x^* x是整数线性规划(ILP)模型的最优解,那么集合 S = { i ∈ V : x i ∗ = 1 } S = \{i \in V : x^*_i = 1\} S={iV:xi=1}是一个最小权重的顶点覆盖。

  • 通过顶点覆盖问题的整数规划形式,可以证明整数规划是一个 NP-hard 的搜索问题

2.3 带权顶点覆盖的线性规划 (LP)

点覆盖的整数规划是一个NP难问题,因此我们希望能找到它的近似算法,牺牲准确度以快速求解。为了降低问题的计算复杂度,我们将整数约束 x i ∈ { 0 , 1 } x_i \in \{0, 1\} xi{0,1}放宽为连续变量的范围约束 0 ≤ x i ≤ 1 0 \leq x_i \leq 1 0xi1。得到线性规划模型如下:

image-20241124125801148

LP 和 ILP 的区别:

  1. 约束松弛:ILP 强制 x i x_i xi为 0 或 1(整数),但 LP 允许 x i x_i xi是[0,1] 区间内的实数。
  2. 解空间变化:LP 的解空间更大,因为它允许分数解。ILP 的解空间是 LP 解空间的一个子集。
  3. 最优值关系:LP 的最优值 Z L P ≤ Z I L P Z_{LP} \leq Z_{ILP} ZLPZILP

通过求解线性规划模型的分数解 x ∗ x^* x,我们可以通过以下方法将其转换为整数解,从而构造一个近似算法。使用 舍入方法 ,将 x i ∗ x_i^* xi 转换为整数解 x i x_i xi
x i = { 1 如果  x i ∗ ≥ 1 2 0 否则 . x_i = \begin{cases} 1 & \text{如果 } x_i^* \geq \frac{1}{2} \\ 0 & \text{否则}. \end{cases} xi={10如果 xi21否则.
定理:如果 x ∗ x^* x 是带权点覆盖问题线性规划(LP)松弛的最优解,则集合 S = { i ∈ V : x i ∗ ≥ 1 2 } S = \{ i \in V : x_i^* \geq \frac{1}{2} \} S={iV:xi21} 是一个点覆盖。同时,这个点覆盖的权重至多是原整数规划(ILP)问题最小权重的两倍

证明S是一个点覆盖

任取一条边 ( i , j ) ∈ E (i, j) \in E (i,j)E,在线性规划的约束中,有 x i ∗ + x j ∗ ≥ 1 x_i^* + x_j^* \geq 1 xi+xj1,表示这条边的两个端点的解的和至少为 1。如果 x i ∗ < 1 2 x_i^* < \frac{1}{2} xi<21,则 x j ∗ ≥ 1 2 x_j^* \geq \frac{1}{2} xj21;同样,如果 x j ∗ < 1 2 x_j^* < \frac{1}{2} xj<21,则 x i ∗ ≥ 1 2 x_i^* \geq \frac{1}{2} xi21

因此,至少有一个端点满足 x i ∗ ≥ 1 2 x_i^* \geq \frac{1}{2} xi21,即边(i, j)被集合S覆盖。由此可知,集合S是一个有效的点覆盖。

2倍近似解证明:核心思路是整数规划的最优解大于等于线性规划的解。

S ∗ S^* S整数规划(ILP)问题的最优解,且其权重为 w ( S ∗ ) = ∑ i ∈ S ∗ w i w(S^*) = \sum_{i \in S^*} w_i w(S)=iSwi

在线性规划松弛中,因为 w ( S ∗ ) w(S^*) w(S)是 ILP 的最优值,而 LP 是 ILP 的松弛,有LP 的目标值满足$w(S^) \geq \sum_{i \in S} w_i x_i^ $。

在舍入过程中,集合S包含所有满足 x i ∗ ≥ 1 2 x_i^* \geq \frac{1}{2} xi21的顶点, w ( S ∗ ) = ∑ i ∈ S ∗ w i ≥ w ( S ) = ∑ i ∈ S w i x i ∗ ≥ 1 2 ∑ i ∈ S w i w(S^*) = \sum_{i \in S^*} w_i \geq w(S) = \sum_{i \in S} w_ix_i^* \geq \frac{1}{2}\sum_{i \in S}w_i w(S)=iSwiw(S)=iSwixi21iSwi

最后得到: w ( S ) ≤ 2 ⋅ w ( S ∗ ) w(S) \leq 2 \cdot w(S^*) w(S)2w(S)

image-20241124131555755

第一个大于等于是因为 整数规划是最优解,线性规划是松弛的,因此整数规划的最优解大于等于线性规划的解。

第二个大于等于是直接将 x i ∗ ≥ 1 2 x_i^* \geq \frac{1}{2} xi21代入线性规划的表达式中即可。

三、其它题

1.装箱子

image-20241126154232293

2 K着色整数规划

image-20241209144230859 image-20241209163625258

结束语

感谢阅读吾之文章,今已至此次旅程之终站 🛬。

吾望斯文献能供尔以宝贵之信息与知识也 🎉。

学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。

然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值