我正在尝试解决以下problem,但我的算法太慢了。这是因为我使用Edmonds - Karp algorithm来查找最大流量,当应用于二分图时,它也会产生最大匹配。它的运行时间是n ^ 5。我想知道任何更快的算法来解决这个问题(特别是对于二分图)。我目前正在研究的一种算法是Relabel to Front,即n ^ 3。
答案 0 :(得分:7)
我使用dinitz's algorithm编写了二分匹配。还有一个定理,对于最大二分匹配问题类型的图形,它具有与重新标记前面相同的复杂性(并且更容易实现)。
在解决二分匹配问题时出现的网络中, 阶段的数量以O(\ sqrt {V})为界,因此导致 O(\ sqrt {V} E)时间限制。得到的算法也称为 Hopcroft-Karp算法。更一般地说,这个约束适用于任何单位 网络 - 每个顶点的网络,除了源和接收器, 要么只有一个容量进入边缘,要么只有一个 容量1的输出边缘,所有其他容量是任意的 整数。
不幸的是,关于该算法的维基百科文章还不足以实现它,我在网上找不到更好的资源。我有自己的实现,但是我很久以前就已经使用我大学其他人的指导创建了它。
答案 1 :(得分:2)
用于二分匹配的所谓Hungarian algorithm可以在较低的运行时复杂度下实现。
答案 2 :(得分:1)
Hopcroft-Karp算法提供了最低的时间复杂度,可以找到Bipartite graph
的最大匹配项(或最小顶点覆盖率)。
根据维基百科,它在O(E * (V^0.5))
中运行,E
是总边,而V
是总顶点。在最坏的情况下(密集图),该值为O(V^2.5)
。