迭代最大匹配
Iterating over maximum matchings
本文关键字:迭代 更新时间:2023-10-16
图中的匹配是一组成对的顶点不相交的边,如果它覆盖了图中尽可能多的顶点,它就是最大值。有一些有效的算法可以找到这样的匹配,以及实现(例如c++中的Boost)。
然而,在任意图中可能存在多个最大匹配;有没有任何算法的实现可以让你列出所有这些?我更喜欢c++实现,但其他语言也可以。
"二部图中所有完美、最大和最大匹配的枚举算法" -http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.107.8179&代表= rep1& type = pdf
"计算弦和弦二部的匹配数"图形类"http://www.jaist.ac.jp/okamotoy/PDF/matchchordal.pdf
在这篇2001年的论文中,T. Uno(与上面Piotr给出的第一个参考文献中的作者相同)解决了在一般图中找到所有最大匹配的问题:
非二部极大匹配的快速枚举算法
现在最大(基数)匹配通常是最大匹配的严格子集,但是一旦最大匹配的大小已知,最大匹配很容易过滤以消除除最大匹配之外的所有匹配。
然而T. Uno提出的这种"快速算法"的时间复杂度取决于最大匹配的数量。实际上,对于具有|V|顶点和|E|边的一般图G(V,E),其时间复杂度为O(|E|+|V|+Δ*N),其中Δ为顶点的最大度,N为最大匹配的个数。
当最大匹配与最大匹配的比率很高时,这将不是理想的。然而,该算法适用于一般图,因此在仅搜索最大匹配时期望这种行为似乎是相当合理的。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- 在向量内的向量上迭代
- 为什么output_editor Concept不需要output_e迭代器标记
- TSP递归解的迭代形式
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器