matching中的graph是一组成对的顶点不相交的边,如果它覆盖图中最大可能的顶点数,则它是最大的。有一些有效的算法可用于查找此类匹配以及实现(例如,参见Boost以获取C ++中的示例)。
但是,任意图形中可以存在多个最大匹配;是否有任何算法实现允许您列出所有这些?我更喜欢C ++实现,但其他语言也很好。
答案 0 :(得分:2)
“枚举二分图中所有完美,最大和最大匹配的算法” - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.107.8179&rep=rep1&type=pdf
“计算弦和弦双音中的匹配数 图类“ - http://www.jaist.ac.jp/~okamotoy/PDF/matchchordal.pdf
我希望这能以某种方式帮助你。
答案 1 :(得分:1)
在2001年的论文中,T。Uno(与Piotr在上面给出的第一个参考文献中的同一作者)解决了在一般图中找到所有最大匹配的问题:
A Fast Algorithm for Enumerating Non-Bipartite Maximal Matchings
现在最大(基数)匹配通常是最大匹配的严格子集,但是一旦知道了最大匹配的大小,就可以轻松过滤最大匹配以消除除最大匹配之外的所有匹配
然而,T.Uno提出的这种“快速算法”的时间复杂度取决于最大匹配的数量。实际上对于具有| V |的一般图G(V,E)顶点和| E |边,时间复杂度为O(| E | + | V | +Δ* N),其中Δ是最大顶点度,N是最大匹配数。
当最大匹配与最大匹配的比率很高时,这不是理想的。然而,该算法适用于一般图形,因此在仅搜索最大匹配时期望这种行为似乎是合理的。