Hopcroft-Karp算法求二分图最大匹配
字数 542 2025-11-01 15:29:05

Hopcroft-Karp算法求二分图最大匹配

题目描述
给定一个二分图G=(U,V,E),其中U和V是两个不相交的顶点集合,E是连接U和V的边集合。求该二分图的最大匹配,即找到尽可能多的边,使得这些边没有公共顶点。

算法思路
Hopcroft-Karp算法通过BFS构建层次图,然后使用DFS寻找增广路径。关键思想是每次寻找一束最短的增广路径,而不是单条路径。

详细步骤

1. 初始化

  • 定义距离数组dist,记录U集合顶点到虚拟起点的距离
  • 定义匹配数组pairU和pairV,记录顶点匹配关系
  • 初始化所有顶点为未匹配状态

2. BFS构建层次图

  • 从所有未匹配的U顶点开始BFS
  • 计算每个U顶点到起点的最短距离
  • 遇到未匹配的V顶点时停止当前分支
  • 返回是否存在增广路径

3. DFS寻找增广路径

  • 从U集合的未匹配顶点开始DFS
  • 按照BFS建立的层次图前进
  • 找到增广路径后更新匹配关系
  • 使用递归实现路径查找

4. 算法主循环

while BFS找到增广路径:
    for u in U的未匹配顶点:
        if DFS(u)找到增广路径:
            匹配数加1

复杂度分析

  • 时间复杂度:O(√|V| * |E|)
  • 空间复杂度:O(|V| + |E|)

算法优势

  • 相比匈牙利算法的O(|V||E|)复杂度更优
  • 特别适合稠密二分图
  • 实际运行效率很高

这个算法通过分层搜索和批量增广的策略,显著提高了二分图匹配的求解效率。

Hopcroft-Karp算法求二分图最大匹配 题目描述 给定一个二分图G=(U,V,E),其中U和V是两个不相交的顶点集合,E是连接U和V的边集合。求该二分图的最大匹配,即找到尽可能多的边,使得这些边没有公共顶点。 算法思路 Hopcroft-Karp算法通过BFS构建层次图,然后使用DFS寻找增广路径。关键思想是每次寻找一束最短的增广路径,而不是单条路径。 详细步骤 1. 初始化 定义距离数组dist,记录U集合顶点到虚拟起点的距离 定义匹配数组pairU和pairV,记录顶点匹配关系 初始化所有顶点为未匹配状态 2. BFS构建层次图 从所有未匹配的U顶点开始BFS 计算每个U顶点到起点的最短距离 遇到未匹配的V顶点时停止当前分支 返回是否存在增广路径 3. DFS寻找增广路径 从U集合的未匹配顶点开始DFS 按照BFS建立的层次图前进 找到增广路径后更新匹配关系 使用递归实现路径查找 4. 算法主循环 复杂度分析 时间复杂度:O(√|V| * |E|) 空间复杂度:O(|V| + |E|) 算法优势 相比匈牙利算法的O(|V||E|)复杂度更优 特别适合稠密二分图 实际运行效率很高 这个算法通过分层搜索和批量增广的策略,显著提高了二分图匹配的求解效率。