用于近似加权匹配的工程算法(节选)(附:权重匹配问题简单近似算法)

用于近似加权匹配的工程算法(节选)

Engineering Algorithms for Approximate Weighted Matching

申明
版权归原文作者及出版单位所有,如有侵权请联系删除。

摘要

我们对最大权匹配问题的近似算法进行了系统研究。这包括一个新算法,为简单的贪婪方法提供了最近的路径启发式。令人惊讶的是,这个相当简单的算法在运行时间和解决方案质量方面表现非常出色,尽管一些其他方法在理论性能上更好,但它仍然位居最佳算法之一。

1.引言

给定一个图 G = ( V , E ) G = (V, E) G=(V,E),其中 n : = ∣ V ∣ n := |V| n:=V 为节点数, m : = ∣ E ∣ m := |E| m:=E 为边数,若边的子集 M ⊆ E M ⊆ E ME 满足没有两个 M M M 的成员共享一个端点,则 M M M 被称为匹配。如果节点 u ∈ V u ∈ V uV 被匹配,那么存在一条边 ( u , v ) ∈ M (u,v) ∈ M (u,v)M;那么, ( u , v ) (u,v) (u,v) 被称为匹配边, v v v 被称为 u u u 的配偶。否则, u u u 被称为未匹配自由。如果 G G G 是带权的,且 w : E → I R ≥ 0 w : E → IR≥0 w:EIR0 表示相关的权重函数,那么 M 的权重被定义为 w ( M ) : = ∑ e ∈ E w ( e ) w(M) := ∑_{e∈E} w(e) w(M):=eEw(e),并且如果不存在更大权重的匹配,则称 M M M最大权重匹配

第一个带权匹配问题的多项式时间算法是由 Edmonds [1] 提出的,其运行时间为 O ( n 2 m ) O(n^2m) O(n2m)。这已经被多次改进,迄今为止已知的最快的精确算法在一般图的情况下具有渐近运行时间
O ( n ( m + n l o g n ) ) O(n(m + nlog n)) O(n(m+nlogn)) [2]。对于限制性问题和图类别,如整数边权重 [3]、平面图 [4] 或最大基数匹配 [5,6],已经取得了进展。

最大带权匹配问题的最近实现之一是由 Mehlhorn 和 Sch¨afer [7] 提出的,这是 Galil、Micali 和 Gabow [8] 算法的一种变体。在 [9] 中可以找到实现的历史。尽管这些算法具有多项式运行时间,但在处理非常大的图形或重复计算匹配的一些实际应用中速度太慢([10] 中提到了一些应用)。这促使我们使用最大带权匹配问题的近似算法,其运行时间较低,最好是线性,以获得非常好的结果。

相关工作。一种众所周知的算法通过按其权重降序扫描边,并贪婪地添加自由节点之间的边,从而实现 1 2 \frac{1}{2} 21 近似 [11]。请注意,这对于整数边权重可以实现线性运行时间第一个与整数排序无关的线性时间 1 2 \frac{1}{2} 21-近似算法是由 Preis [12] 给出的。后来,Drake 和 Hougardy [13] 提出了一种不同的 1 2 \frac{1}{2} 21-近似算法,称为 Path Growing Algorithm( P G A PGA PGA),其线性运行时间更容易证明。他们还开发了一个 ( 2 3 − ε ) (\frac{2}{3} − \varepsilon) 32ε算法 [10,14],其运行时间为 O ( n ε ) O(\frac{n}{\varepsilon}) O(εn)。之后,由 Pettie 和 Sanders [15] 开发了一个更简单的 ( 2 3 − ε ) (\frac{2}{3} − \varepsilon) 32ε近似算法,其运行时间为 O ( n l o g 1 ε ) O(n log\frac{1}{\varepsilon}) O(nlogε1)。在 [14] 中对几种 1 2 \frac{1}{2} 21-近似算法进行了实验评估。这包括由路径启发式改进的 P G A PGA PGA 版本,不影响线性运行时间;该版本的 P G A PGA PGA 称为 P G A ′ PGA' PGA。该算法在实验中表现非常好,因此通常认为在大多数情况下超线性运行时间的贪婪算法是一个糟糕的选择。

我们的贡献。作为看似微不足道但至关重要的贡献,我们关注近似算法的测得解质量与最优解的关系。这不仅证明了这些算法实现的解决方案比它们的最坏情况保证所暗示的质量要好得多,而且还使得相互比较这些算法更有意义。尽管这些算法的解决方案质量仅相差几个百分点,但与最优性之间的差距可能相差很大。我们还为常常被列举为应用近似算法的主要动机的现实(real-world)输入提供了第一批实验。

我们最重要的算法贡献是通过一种名为 G P A GPA GPA 的新算法对贪婪方法进行改进,该算法在第 2 节中详细描述。基本上, G P A GPA GPA 将先前提到的用于 P G A ′ PGA' PGA 的路径启发式应用于贪婪算法,使先前不受欢迎的贪婪方法跃升为最佳实用算法之一。特别是,与来自 [15] 的随机 ( 2 3 − ε ) (\frac{2}{3} − \varepsilon) 32ε近似算法(RAMA)相比,GPA 通常更快,并且在解决方案质量方面经常优于它。最终的赢家是另一种新算法,首先执行 G P A GPA GPA,然后应用 RAMA 的修改版本,称为 ROMA。由于 GPA 加速了 ROMA 的收敛,这种组合与仅 ROMA 一样快。

大纲。在第 2 节中描述了测试的近似算法。第 3 节介绍了进行测试的图形实例,这些实例在第 4 节中作为展示进行了测试。主要结果在第 5 节中总结。

2.算法

贪婪算法。如图 1 所示的众所周知的算法采用简单的贪婪策略 [11]:
在这里插入图片描述

图1:近似权重匹配的贪心算法

重复地将当前具有最大权重的非匹配边与自由端点的边添加到匹配,直到没有边剩余。贪婪算法的运行时间为 O ( m + s o r t ( m ) ) O(m + sort(m)) O(m+sort(m)),其中 s o r t ( m ) sort(m) sort(m) 表示对 m m m 个项进行排序的时间。这对于整数边权重可以实现线性运行时间,对于基于比较的排序则为 O ( m l o g n ) O(mlog n) O(mlogn)。设 M ∗ M^* M 为最大权重匹配, M M M 为贪婪算法找到的匹配。每次将边 e e e 添加到 M M M 时,最多从图中移除两个边 e 1 e_1 e1 e 2 e_2 e2 ∈ ∈ M ∗ M^* M由于 w ( e ) ≥ w ( e 1 ) w(e) ≥ w(e_1) w(e)w(e1) w ( e ) ≥ w ( e 2 ) w(e) ≥ w(e_2) w(e)w(e2),贪婪匹配 M M M 满足 2 w ( M ) ≥ w ( M ∗ ) 2w(M) ≥ w(M^*) 2w(M)w(M),因此性能比为 1 2 \frac{1}{2} 21

PGA’。 Drake 和 Hougardy 改进的 Path Growing Algorithm 被称为 P G A ’ PGA’ PGA [14]。原始算法 ( P G A ) (PGA) PGA[13] 在没有改进的情况下首先逐个增加一组节点不相交的路径。每个路径都是从任意的自由节点开始构建的,重复沿着与其当前端点 u u u 相邻且具有自由对端点 v v v 的最重边 e = ( u , v ) e = (u,v) e=(u,v) 进行扩展,并删除所有与 u u u 相邻的边。如果当前路径无法扩展,则 P G A PGA PGA 开始新路径,并在没有边剩余时结束。在增加路径的同时,选择的边缘交替地添加到两个不同的匹配 M 1 M_1 M1 M 2 M_2 M2 中,最后返回较重的那个(补充材料:权重匹配问题的简单近似算法)。

该算法最多处理每条边一次,因此具有 O ( m ) O(m) O(m) 的线性运行时间。该算法产生了近似比为 1 2 \frac{1}{2} 21,通过在算法运行过程中将每条边缘分配给删除它的端点,可以证明这一点。

然后,对于最大权重匹配 M M M 的每条边 e e e,都存在一条边 e ′ ∈ M 1 ∪ M 2 e' ∈ M_1 ∪ M_2 eM1M2,其中 w ( e ′ ) ≥ w ( e ) w(e') ≥ w(e) w(e)w(e),并且 e ′ e' e 邻接于 e e e 分配给的节点。因此, w ( M 1 ∪ M 2 ) ≥ w ( M ) w(M_1 ∪ M_2) ≥ w(M) w(M1M2)w(M),并且 M 1 M_1 M1 M 2 M_2 M2 中较重的集合至少有 1 2 w ( M ) \frac{1}{2}w(M) 21w(M) 的权重。

该算法的改进版本( P G A ′ PGA' PGA)如图 2 所示。
在这里插入图片描述

图2:改进的路径增长算法PGA'

P G A ′ PGA' PGA 不是交替地将路径的边缘添加到两个匹配中,而是为每个路径计算一个最优匹配。由于通过动态规划计算路径的最大权重匹配需要与路径长度(相关的)线性时间(后面有注),这在本节的末尾有所描述,因此此过程不会影响渐近运行时间。此外,与原始算法相比,路径对最终匹配的贡献只会增加权重,因此 1 2 \frac{1}{2} 21 的近似比没有受到损害。作为第二个改进,计算匹配在 P G A ′ PGA' PGA 结束时被扩展为最大匹配,只需一次扫描所有边缘,而不会增加 O ( m ) O(m) O(m) 的运行时间。

GPA算法。我们在图3中展示的全局路径算法(GPA)提出了一种新的近似方法,通过整合贪心算法和PGA算法。
在这里插入图片描述

图3:全局路径算法GPA

GPA生成了一组最大权重的路径和偶数长度的循环(译者注:可以画一下三角形五边形,无法完成匹配,必须偶数长的圈),然后通过动态规划计算了每个路径的最大权重匹配。这些路径最初不包含边,因此代表n个平凡路径——孤立节点。该集合然后通过按照它们的权重降序逐步添加适用的边来扩展。如果一条边连接两个不同路径的端点或奇数长度路径的两个端点,则称之为适用边。如果一条边闭合一个奇数长度的循环(意思应该是形成了奇数长的圈),或者它与现有路径的内部节点相邻(意思应该是连接了非路径端点),则它是不适用的。一旦扫描完所有边,就为每条路径和循环计算最大权重匹配。

判断(test)一条边是否适用可以在常数时间内完成,扩展路径和循环集需要线性数量的这样的测试(test)。对于给定路径,使用上述已经提到并在下文描述的动态规划方法计算最大权重匹配需要路径长度的线性时间。因此, G P A GPA GPA在边被排序后需要线性的时间,因此 G P A GPA GPA的运行时间为 O ( s o r t ( m ) + m ) O(sort(m) + m) O(sort(m)+m),通常情况下为 O ( m l o g n ) O(m log n) O(mlogn)

M ∗ M^* M为最优匹配, P ⊂ E P ⊂ E PE为在 G P A GPA GPA的第一轮中添加到某个路径或循环的边的集合。对于每个 e ∈ M ∗ \ P e ∈ M^* \backslash P eM\P e e e G P A GPA GPA考虑的时间点上不适用,因此存在两条边 e 1 e_1 e1 e 2 e_2 e2 P \ M ∗ P \backslash M^* P\M e e e相邻,满足 w ( e 1 ) ≥ w ( e ) w(e_1) ≥ w(e) w(e1)w(e) w ( e 2 ) ≥ w ( e ) w(e_2) ≥ w(e) w(e2)w(e)。反之, P P P的每个成员最多与 M ∗ M^* M的两条边相邻,因此存在一个单射 f : M ∗ → P f:M^* → P fMP,使得 w ( f ( e ) ) ≥ w ( e ) w(f(e)) ≥ w(e) w(f(e))w(e),这意味着 w ( P ) ≥ w ( M ∗ ) w(P) ≥ w(M^*) w(P)w(M)

(译者注:对反之推导,对于每个 e ∈ P \ M ∗ e ∈P \backslash M^* eP\M,因此存在两条边 e 1 e_1 e1 e 2 e_2 e2 e ∈ M ∗ \ P e ∈ M^* \backslash P eM\P e e e相邻,满足 w ( e 1 ) ≤ w ( e ) w(e_1) \le w(e) w(e1)w(e) w ( e 2 ) ≤ w ( e ) w(e_2) \le w(e) w(e2)w(e))

此外,路径的最大权重匹配的权重至少是路径权重的一半(译者注:若少于一半,取路径最大权重匹配的补集),这也适用于偶数长度的循环。因此, G P A GPA GPA在第一轮计算的任何匹配 M M M满足 w ( M ) ≥ 1 2 w ( P ) ≥ 1 2 w ( M ∗ ) w(M) ≥ \frac{1}{2}w(P) ≥ \frac{1}{2}w(M^*) w(M)21w(P)21w(M),因此 G P A GPA GPA的性能比率为 1 2 \frac{1}{2} 21。如图4所示,该比率是紧绷的:
在示例图中, G P A GPA GPA找到的匹配的权重不超过 m 4 ( c + ε ) = 1 2 w o p t + ε ′ \frac{m}{4}(c + \varepsilon)= \frac{1}{2} w_{opt} + \varepsilon' 4mc+ε=21wopt+ε
在这里插入图片描述
图4:这个具有最大权重匹配,权重为 w o p t = m 2 c w_{opt} = \frac{m}{ 2}c wopt=2mc的图表明贪心算法、 P G A PGA PGA G P A GPA GPA 的近似比率为 1 2 \frac{1}{2} 21 是紧绷的
【译者注:在这个语境中,“tight” 表示一个上下文中某个性质或界限是最佳的,不能再改善或调整,达到了极限。在这段话中,提到 “the approximation ratio of 1/2 is tight for the greedy algorithm, PGA, and GPA”,意味着对于贪心算法、PGA(假设PGA是前面提到的某种算法)、以及GPA(全局路径算法), 1 2 \frac{1}{2} 21 的近似比率是最佳的,不能再取得更好的性能比率。也就是说,在给定的情境下,这些算法达到了近似比率的最优水平,无法通过任何调整或改进来提高这个比率。】

G P A GPA GPA的第二轮可以在 G P A GPA GPA完成后对剩余的具有两个未匹配端点的边集上运行。我们甚至允许进行三轮,但在第4节中展示的实验中,由于没有适用的边剩余,算法几乎从不运行第三轮。在由 G P A GPA GPA本身产生的结果上第二次运行 G P A GPA GPA P G A PGA PGA算法中使用的后处理的一个替代方法, P G A PGA PGA通过简单地收集具有两个空闲端点的边来将计算的匹配扩展为最大匹配。 P G A PGA PGA的后处理显然也可以应用于 G P A GPA GPA

补:

权重匹配问题简单近似算法

A simple approximation algorithm for the weighted matching problem

摘要

我们提出了一种在线性时间内近似求解任意图中最大权重匹配问题的算法,其性能比率为1/2。这样的结果已经为人所知,归功于Preis [STACS’99, 计算机科学讲座笔记,第1563卷,1999年,第259–269页]。我们的算法采用一种新的方法,比Preis提出的方法更简单,而且不需要摊销分析来证明其运行时间。

关键词:近似算法;算法分析;图算法;最大权重匹配

1.引言

在图 G = ( V , E ) G =(V,E) G=VE中,匹配 M M M是图 G G G的边集 E E E的子集,使得 M M M中的任意两条边都不相邻。在图算法理论中,寻找图中最大匹配的问题是一个基础性问题,具有许多应用。目前已知用于解决这个问题的最快算法是由Micali和Vazirani [4,8]提出的,其运行时间为 O ( ∣ V ∣ ∣ E ∣ ) O(\sqrt{|V|}|E|) O(V E)

本文关注加权匹配问题的算法。该问题定义如下:设 G = ( V , E ) G =(V,E) G=VE是一个图, w : E → R + w:E →\mathbb{ R}_+ wER+是一个将权重赋给 G G G的每条边的函数。然后, G G G的边的子集 F ⊆ E F ⊆ E FE的权重 w ( F ) w(F) w(F)定义为 w ( F ) : = ∑ e ∈ F w ( e ) w(F) := ∑_{e∈F} w(e) w(F):=eFw(e)。现在,加权匹配问题是在 G G G中找到具有最大权重的匹配 M M M

目前已知用于在一般图中解决加权匹配问题的最快算法是由Gabow [2]提出的,其运行时间为 O ( ∣ V ∣ ∣ E ∣ + ∣ V ∣ 2 l o g ∣ V ∣ ) O(|V||E| + |V|^2 log |V|) O(V∣∣E+V2logV)。在假设所有边的权重都是在范围 [ 1... N ] [1 ... N] [1...N]内的整数的情况下,Gabow和Tarjan [3]提出了一个运行时间为 O ( ∣ V ∣ l o g ( ∣ V ∣ ) α ( ∣ E ∣ , ∣ V ∣ ) ∣ E ∣ l o g ( N ∣ V ∣ ) ) O(\sqrt{|V| log(|V|)α(|E|,|V|)}|E| log(N|V|)) O(Vlog(V)α(E,V) Elog(NV))的算法,其中 α α α A c k e r m a n n Ackermann Ackermann函数的反函数。对于涉及非常大图的许多实际问题,这样的运行时间可能过于昂贵,例如 F E M FEM FEM网格的细化 [5] 和 V L S I VLSI VLSI设计中的分区问题 [6]。

因此,人们对加权匹配问题的近似算法感兴趣,理想情况下具有线性运行时间。对于加权匹配问题的解决方案,近似算法的质量由其所谓的性能比率来衡量。如果一个近似算法具有性能比率 c c c,那么对于所有图,它找到的匹配的权重至少是最优解的 c c c倍。

很容易看出,图1中显示的贪心算法是加权匹配问题的一种近似算法,性能比率为 1 2 \frac{1}{2} 21
在这里插入图片描述

图1:最大权重匹配的贪心算法

如果对 G G G的边进行预处理,并按权重递减的顺序排序,那么贪心算法的运行时间可以快至 O ( ∣ E ∣ l o g ∣ V ∣ ) O(|E| log |V|) O(ElogV)

在[7]中,Preis通过利用所谓的局部最重边的概念改进了简单的贪心方法。通过这种方式,他得到了一个加权匹配问题的近似算法,其性能比率为 1 2 \frac{1}{2} 21,运行时间为 O ( ∣ E ∣ ) O(|E|) O(E)。在本文中,我们使用一种新方法得到了另一种这样的算法,相比[7]中的算法,我们的算法更简单,不需要分析摊销来证明其线性运行时间。

2.路径增长算法

我们提出的一种在图中寻找最大权重匹配的性能比率为 1 2 \frac{1}{2} 21的新算法如图2所示。
在这里插入图片描述

图2:找到最大权重匹配的路径增长算法

由于主要思想涉及在给定图中增长一组不相交的路径,我们将其称为路径增长算法。路径增长算法始于长度为0的路径,即一个单一的顶点,并尝试沿着一条方向尽可能地延伸当前路径。

路径总是沿着当前可用的最重边进行扩展。一旦选择了最重边,所有与当前顶点相邻的其他边都会被删除,以确保路径是顶点不相交的。如果不再能够通过一条边扩展当前路径,则在新的顶点上启动一个新路径。这个过程一直持续,直到图的所有顶点都属于某个路径(可能长度为0)。

所有这些路径的边被收集在两个集合 M 1 M_1 M1 M 2 M_2 M2中。由于算法的第7行,路径的边被交替插入 M 1 M_1 M1 M 2 M_2 M2。因此,这两个集合都不包含相邻的边,它们都是匹配。在这两个匹配中,返回权重较大的那一个。

3. 线性运行时间

定理1:路径增长算法的运行时间为O(|E|)。

证明:在算法的第4至10行的while循环中,图的每个顶点最多处理一次,因为在被处理后,它将在第8行被从 G G G中移除。在时间上与顶点 x x x的度成正比的情况下,找到与某个顶点 x x x相邻的最重边并将 x x x从G中移除是容易实现的。通过始终从一条边的端点中选择路径,可以确保永远不会处理度为零的顶点。图 G G G中度至少为1的顶点数是 O ( ∣ E ∣ ) O(|E|) O(E)。因此,路径增长算法的总运行时间受限于 V V V中顶点度的总和,为 O ( ∣ E ∣ ) O(|E|) O(E)

4. 性能比率为 1 2 \frac{1}{2} 21

定理2:路径增长算法的性能比率为 1 2 \frac{1}{2} 21

证明:对于性能比率的分析,我们将图的每条边分配给图的某个顶点。每当算法的第8行移除一个顶点时,当前与该顶点 x x x相邻的所有边都分配给 x x x。这样, G G G的每条边都被分配给 G G G的某个顶点。注意,可能存在 G G G中没有边分配给它们的顶点

现在考虑 G G G中的最大权重匹配 M M M。由于 M M M不能包含两条相邻的边, M M M的所有边都分配给 G G G的不同顶点。在算法的每一步中,当前与顶点 x x x相邻的最重边在算法的第5行中被选择并添加到 M 1 M_1 M1 M 2 M_2 M2。因此, M 1 M_1 M1 M 2 M_2 M2的权重至少与 M M M的权重一样大。由于
m a x [ w ( M 1 ) , w ( M 2 ) ] ≥ 1 2 w ( M 1 ∪ M 2 ) ≥ 1 2 w ( M ) max[w(M_1), w(M_2)] \ge \frac{1}{2}w(M_1 ∪ M_2) \ge \frac{1}{2}w(M) max[w(M1),w(M2)]21w(M1M2)21w(M)

因此,路径增长算法返回的权重至少为最优解权重的一半。 ✷

5. 结论

构造图的示例很容易显示路径增长算法的最差性能比率为 1 2 \frac{1}{2} 21。然而,在实际应用中,有几种方法可以改善该算法的性能比率。

首先,注意到路径增长算法返回的匹配不一定是最大匹配。因此,在后处理阶段,可以将路径增长算法找到的匹配扩展为 O ( ∣ E ∣ ) O(|E|) O(E)的最大匹配。

其次,可以选择将 M 1 M_1 M1 M 2 M_2 M2中的一个匹配作为解决方案返回,也可以返回路径增长算法计算的每条路径的最大权重匹配。对于树,可以使用动态规划方法在线性时间内计算出最大权重匹配,因此也适用于路径。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值