algorithm - Hopcroft-Karp 算法如何工作?

标签 algorithm matching

我目前正在进行一个项目,以图形方式解释 Hopcroft-Karp 算法。

我正在使用 Wikipedia article 中的伪代码.

我还在 Stack Overflow 上看到了这个算法的实现 in Python

如果我不必完全理解算法就可以使用它的话,这会非常棒。

我的问题如下:伪代码中的Dist[]数组是什么意思,广度优先搜索中图的分层是怎么做的。我掌握了 DFS 的工作原理。

提前致谢。

最佳答案

标准BFS创建层,使得连续层中的节点之间的距离恰好为 1(即,连续层的节点之间存在长度为 1 的路径)。

for v in G1
    if Pair[v] == NIL
       Dist[v] = 0
       Enqueue(Q,v)
   else
       Dist[v] = INF

因此该代码初始化 BFS 树的第一层,将所有“free nodesv(即 Pair[v] == NIL)设置为距离 0。

while Empty(Q) == false
   v = Dequeue(Q)
   for each u in Adj[v]
        if Dist[ Pair[u] ] == INF
             Dist[ Pair[u] ] = Dist[v] + 1
             Enqueue(Q,Pair[u])

此代码继续逐层构建 BFS 树,对于 v 的邻居节点 u(距离恰好为一个)。

Dist[] 只是一种管理从节点到 BFS 初始层的距离的方法

关于algorithm - Hopcroft-Karp 算法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366516/

相关文章:

确定一组中的最低付款的算法

c# - 寻找中位数的选择算法

Javascript 匹配问题,非详尽无遗?

Mysql通过部分匹配搜索相似整数

algorithm - 简单 : Solve T(n)=T(n-1)+n by Iteration Method

c++ - 在 C++ 中从给定的未排序整数 vector 中获取最长排序元素序列的最简单方法

mysql - 与带有重音符号、变音符号等的单词匹配 mysql/php

javascript - 根据选项字符串选择子字符串

algorithm - 字符串按字符数排序

Java 重复模式匹配