📜  最大匹配的 Hopcroft–Karp 算法第 1 套(介绍)

📅  最后修改于: 2022-05-13 01:57:54.109000             🧑  作者: Mango

最大匹配的 Hopcroft–Karp 算法第 1 套(介绍)

二分图中的匹配是一组以没有两条边共享端点的方式选择的边。最大匹配是最大尺寸(最大边数)的匹配。在最大匹配中,如果添加任何边,则不再是匹配。对于给定的二分图,可以有多个最大匹配。

我们在上一篇文章中讨论了最大匹配的重要性和基于福特富尔克森的最大二分匹配方法。基于 Ford Fulkerson 的算法的时间复杂度为 O(V x E)。

Hopcroft Karp 算法是在 O(√V x E) 时间内运行的改进。在讨论算法之前,让我们定义几个术语

自由节点或顶点:给定一个匹配的 M,一个不属于匹配的节点称为自由节点。最初所有顶点都是空闲的(见下图的第一张图)。在第二张图中,u2 和 v2 是免费的。在第三个图中,没有顶点是空闲的。

匹配边和不匹配边:给定一个匹配的 M,属于匹配部分的边称为匹配边,不属于 M(或连接自由节点)的边称为不匹配边。在第一张图中,所有边都是不匹配的。在第二张图中,(u0, v1)、(u1, v0) 和 (u3, v3) 匹配,其他不匹配。

交替路径:给定一个匹配的 M,交替路径是一条边交替属于匹配和不匹配的路径。所有单边路径都是交替路径。中间图中交替路径的示例是 u0-v1-u2 和 u2-v1-u0-v2。

增广路径:给定一个匹配的 M,增广路径是一条从自由顶点开始到结束的交替路径。所有以自由顶点开始和结束的单边路径都是增广路径。在下图中,增强路径以蓝色突出显示。请注意,增广路径总是有一个额外的匹配边。

Hopcroft Karp 算法基于以下概念。

如果存在增广路径,则匹配 M 不是最大值。其他方式也是如此,即如果不存在增广路径,则匹配是最大的

所以这个想法是一一寻找增广路径。并将找到的路径添加到当前匹配。

Hopcroft Karp 算法

1) Initialize Maximal Matching M as empty.
2) While there exists an Augmenting Path p
     Remove matching edges of p from M and add not-matching edges of p to M
     (This increases size of M by 1 as p starts and ends with a free vertex)
3) Return M. 

下图显示了算法的工作原理。

霍普克罗夫特卡普

在初始图中,所有单边都是增广路径,我们可以按任何顺序选择。在中间阶段,只有一条增广路径。我们从 M 中删除这条路径的匹配边并添加不匹配的边。在最终匹配中,没有增广路径,因此匹配是最大的。

Hopcroft Karp 算法的实现在第 2 组中讨论。

最大匹配的 Hopcroft–Karp 算法第 2 组(实施)


参考:

https://en.wikipedia.org/wiki/Hopcroft%E2%80%93Karp_algorithm
http://www.dis.uniroma1.it/~leon/tcs/lecture2.pdf