Articulo de referencia

Algoritmo de Hopcroft-Karp

O(E \\sqrt V) "},"class":{"wt":"Graph algorithm"},"space":{"wt":" O(V) "}},"i":0}}]}"> En informática , el algoritmo de Hopcroft-Karp (a veces llamado con mayor precisión algori...

En informática , el algoritmo de Hopcroft-Karp (a veces llamado con mayor precisión algoritmo de Hopcroft-Karp-Karzanov ) [ 1 ] es un algoritmo que toma un grafo bipartito como entrada y produce un emparejamiento de cardinalidad máxima como salida: un conjunto de tantas aristas como sea posible con la propiedad de que no hay dos aristas que compartan un extremo. Se ejecuta enO(|mi||V|){\displaystyle O(|E|{\sqrt {|V|}})}tiempo en el peor de los casos , dondemi{\displaystyle E}es un conjunto de aristas en el grafo,V{\displaystyle V}es el conjunto de vértices del grafo, y se supone que|mi|=Ω(|V|){\displaystyle |E|=\Omega (|V|)}En el caso de grafos densos , el límite de tiempo se convierte enO(|V|2.5){\displaystyle O(|V|^{2.5})}y para grafos aleatorios dispersos se ejecuta en tiempoO(|mi|registro|V|){\displaystyle O(|E|\log |V|)}con alta probabilidad . [ 2 ]

El algoritmo fue descubierto por John Hopcroft y Richard Karp ( 1973 ) e independientemente por Alexander Karzanov ( 1973 ) . [ 3 ] Al igual que en métodos anteriores para emparejamiento, como el algoritmo húngaro y el trabajo de Edmonds (1965) , el algoritmo de Hopcroft-Karp aumenta repetidamente el tamaño de un emparejamiento parcial al encontrar caminos de aumento . Estos caminos son secuencias de aristas del grafo, que alternan entre aristas en el emparejamiento y aristas fuera del emparejamiento parcial, y donde la arista inicial y final no están en el emparejamiento parcial. Encontrar un camino de aumento nos permite incrementar el tamaño del emparejamiento parcial, simplemente intercambiando las aristas del camino de aumento (poniendo en el emparejamiento parcial las que no estaban, y viceversa). Los algoritmos más simples para emparejamiento bipartito, como el algoritmo de Ford-Fulkerson , encuentran un camino de aumento por iteración: el algoritmo de Hopcroft-Karp en cambio encuentra un conjunto máximo de caminos de aumento más cortos, para asegurar que solo  O(|V|){\displaystyle O({\sqrt {|V|}})}Se necesitan iteraciones en lugar deO(|V|){\displaystyle O(|V|)}iteraciones. El mismo rendimiento deO(|mi||V|){\displaystyle O(|E|{\sqrt {|V|}})}Se puede lograr encontrar emparejamientos de cardinalidad máxima en grafos arbitrarios, con el algoritmo más complejo de Micali y Vazirani. [ 4 ]

El algoritmo de Hopcroft-Karp puede considerarse un caso especial del algoritmo de Dinic para el problema del flujo máximo . [ 5 ]

Ampliando caminos

Un vértice que no es el punto final de una arista en alguna coincidencia parcialMETRO{\displaystyle M}Se denomina vértice libre . El concepto básico en el que se basa el algoritmo es el de una ruta de aumento , una ruta que comienza en un vértice libre, termina en un vértice libre y alterna entre aristas coincidentes y no coincidentes dentro de la ruta. De esta definición se deduce que, excepto los extremos, todos los demás vértices (si los hay) en la ruta de aumento deben ser vértices no libres. Una ruta de aumento podría constar de solo dos vértices (ambos libres) y una única arista no coincidente entre ellos.

SiMETRO{\displaystyle M}es una coincidencia, yPAG{\displaystyle P}es una ruta de aumento relativa aMETRO{\displaystyle M}, entonces la diferencia simétrica de los dos conjuntos de aristas,METROPAG{\displaystyle M\oplus P}, formaría una pareja con el tamaño|METRO|+1{\displaystyle |M|+1}De este modo, al encontrar rutas de aumento, un algoritmo puede incrementar el tamaño del emparejamiento.

Por el contrario, supongamos que un emparejamientoMETRO{\displaystyle M}no es óptimo y dejarPAG{\displaystyle P}sea ​​la diferencia simétricaMETROMETRO{\displaystyle M\oplus M^{*}}dóndeMETRO{\displaystyle M^{*}}es una coincidencia óptima . PorqueMETRO{\displaystyle M}yMETRO{\displaystyle M^{*}}son ambos emparejamientos, cada vértice tiene grado como máximo 2 enPAG{\displaystyle P}. EntoncesPAG{\displaystyle P}debe formar una colección de ciclos disjuntos, de caminos con un número igual de aristas coincidentes y no coincidentes enMETRO{\displaystyle M}, de aumentar las rutas paraMETRO{\displaystyle M}y de aumentar las rutas paraMETRO{\displaystyle M^{*}}; pero esto último es imposible porqueMETRO{\displaystyle M^{*}}es óptimo. Ahora, los ciclos y los caminos con igual número de vértices coincidentes y no coincidentes no contribuyen a la diferencia de tamaño entreMETRO{\displaystyle M}yMETRO{\displaystyle M^{*}}, por lo que esta diferencia es igual al número de caminos de aumento paraMETRO{\displaystyle M}enPAG{\displaystyle P}Por lo tanto, siempre que exista una coincidenciaMETRO{\displaystyle M^{*}}mayor que el ajuste actualMETRO{\displaystyle M}, también debe existir una ruta de aumento. Si no se puede encontrar una ruta de aumento, un algoritmo puede terminar de forma segura, ya que en este casoMETRO{\displaystyle M}debe ser óptimo.

Un camino de aumento en un problema de emparejamiento está estrechamente relacionado con los caminos de aumento que surgen en los problemas de flujo máximo , caminos a lo largo de los cuales se puede aumentar la cantidad de flujo entre los terminales del flujo. Es posible transformar el problema de emparejamiento bipartito en una instancia de flujo máximo, de modo que los caminos alternados del problema de emparejamiento se conviertan en caminos de aumento del problema de flujo. Basta con insertar dos vértices, origen y sumidero, e insertar aristas de capacidad unitaria desde el origen a cada vértice enU{\displaystyle U}y desde cada vértice enV{\displaystyle V}al fregadero; y deje que los bordes deU{\displaystyle U}aV{\displaystyle V}tienen capacidad unitaria. [ 6 ] Una generalización de la técnica utilizada en el algoritmo de Hopcroft-Karp para encontrar el flujo máximo en una red arbitraria se conoce como el algoritmo de Dinic .

Algoritmo

El algoritmo puede expresarse en el siguiente pseudocódigo .

Entrada : Grafo bipartitoGRAMO(UV,mi){\displaystyle G(U\cup V,E)}
Salida : CoincidenciaMETROmi{\displaystyle M\subseteq E}
METRO{\displaystyle M\leftarrow \emptyset }
repetir
PAG{PAG1,PAG2,,PAGk}{\displaystyle {\mathcal {P}}\leftarrow \{P_{1},P_{2},\dots ,P_{k}\}}Conjunto máximo de caminos de aumento más cortos disjuntos en vértices
METROMETRO(PAG1PAG2PAGk){\displaystyle M\leftarrow M\oplus (P_{1}\cup P_{2}\cup \dots \cup P_{k})}
hastaPAG={\displaystyle {\mathcal {P}}=\emptyset }

En más detalle, deje queU{\displaystyle U}yV{\displaystyle V}sean los dos conjuntos en la bipartición deGRAMO{\displaystyle G}y deje que la coincidencia deU{\displaystyle U}aV{\displaystyle V}en cualquier momento ser representado como el conjuntoMETRO{\displaystyle M}El algoritmo se ejecuta en fases. Cada fase consta de los siguientes pasos.

  • Una búsqueda en anchura divide los vértices del grafo en capas.
    • Los vértices libres enU{\displaystyle U}se utilizan como vértices iniciales de esta búsqueda y forman la primera capa de la partición. En el primer nivel de la búsqueda, solo hay aristas sin emparejar, ya que los vértices libres enU{\displaystyle U}Por definición, no son adyacentes a ningún borde coincidente.
    • En los niveles subsiguientes de la búsqueda, se requiere que los bordes recorridos alternen entre coincidentes y no coincidentes. Es decir, al buscar sucesores desde un vértice enU{\displaystyle U}, solo se pueden recorrer los bordes no coincidentes, mientras que desde un vértice enV{\displaystyle V}Solo se pueden recorrer las aristas coincidentes.
    • La búsqueda finaliza en la primera capa.k{\displaystyle k}donde uno o más vértices libres enV{\displaystyle V}se alcanzan.
    • Debido a que cada ruta que llega a un nodo coincidente procede inmediatamente a su pareja en la coincidencia, algunas implementaciones asignan la misma profundidad a ambos vértices, incrementando la profundidad solo cuando se recorre una arista no coincidente.
  • Todos los vértices libres enV{\displaystyle V}en la capak{\displaystyle k}se recopilan en un conjuntoFV{\displaystyle F\subseteq V}. Es decir, un vérticev{\displaystyle v}se pone enF{\displaystyle F}si y solo si finaliza un camino de aumento más corto.
  • El algoritmo encuentra un conjunto máximo de caminos de aumento disjuntos de vértices de longitudk{\displaystyle k}( Máximo significa que no se pueden añadir más caminos de este tipo. Esto es diferente de encontrar el número máximo de dichos caminos, lo cual sería más difícil. Afortunadamente, en este caso basta con encontrar un conjunto máximo de caminos).
    • Este conjunto se puede calcular mediante búsqueda en profundidad (DFS) a partir deF{\displaystyle F}a los vértices libres enU{\displaystyle U}, utilizando el método de capas de búsqueda en amplitud para guiar la búsqueda: el DFS solo puede seguir aristas que conduzcan a un vértice no utilizado en la capa anterior, y las rutas en el árbol DFS deben alternar entre aristas coincidentes y no coincidentes.
    • Una vez que se encuentra un camino de aumento entre uno de los vértices enF{\displaystyle F}y los vértices libres enU{\displaystyle U}, el DFS continúa desde el siguiente vértice de inicio.
    • Cualquier vértice encontrado durante la DFS puede marcarse inmediatamente como usado, ya que si la DFS tiene éxito se utilizará, mientras que si la DFS no tiene éxito (no hay ruta desde él a un vértice libre enU{\displaystyle U}a través de los vértices restantes no utilizados), entonces no tiene sentido explorar más allá de ese vértice en ningún punto posterior en el DFS. Esto garantizaO(|mi|){\displaystyle O(\left|E\right|)}tiempo de ejecución para el DFS.
    • También es posible trabajar en la otra dirección, desde vértices libres enU{\displaystyle U}a aquellos enV{\displaystyle V}, que es la variante utilizada en el pseudocódigo que aparece a continuación .
  • Cada uno de los caminos encontrados de esta manera se utiliza para ampliarMETRO{\displaystyle M}.

El algoritmo finaliza cuando la búsqueda en anchura de una de las fases no encuentra más rutas de aumento.

Análisis

Cada fase consta de una única búsqueda en amplitud y una única búsqueda en profundidad. Por lo tanto, se puede implementar una única fase enO(|mi|){\displaystyle O(|E|)}tiempo. Por lo tanto, el primero|V|{\displaystyle {\sqrt {|V|}}}fases, en un gráfico con|V|{\displaystyle |V|}vértices y|mi|{\displaystyle |E|}bordes, tómese su tiempoO(|mi||V|){\displaystyle O(|E|{\sqrt {|V|}})}.

Cada fase aumenta la longitud del camino de aumento más corto en al menos uno: la fase encuentra un conjunto máximo de caminos de aumento de la longitud dada, por lo que cualquier camino de aumento restante debe ser más largo. Por lo tanto, una vez que el inicial|V|{\displaystyle {\sqrt {|V|}}}Las fases del algoritmo se han completado, el camino de aumento restante más corto tiene al menos|V|{\displaystyle {\sqrt {|V|}}}aristas en él. Sin embargo, la diferencia simétrica del emparejamiento óptimo final y del emparejamiento parcial M encontrado por las fases iniciales forma una colección de caminos de aumento disjuntos en vértices y ciclos alternados. Si cada uno de los caminos en esta colección tiene una longitud al menos|V|{\displaystyle {\sqrt {|V|}}}, puede haber como máximo|V|{\displaystyle {\sqrt {|V|}}}rutas en la colección, y el tamaño de la coincidencia óptima puede diferir del tamaño deMETRO{\displaystyle M}por como máximo|V|{\displaystyle {\sqrt {|V|}}}bordes. Dado que cada fase del algoritmo aumenta el tamaño del emparejamiento en al menos uno, puede haber como máximo|V|{\displaystyle {\sqrt {|V|}}}fases adicionales antes de que finalice el algoritmo.

Dado que el algoritmo realiza un total de como máximo2|V|{\displaystyle 2{\sqrt {|V|}}}fases, toma un tiempo total deO(|mi||V|){\displaystyle O(|E|{\sqrt {|V|}})}en el peor de los casos.

En muchos casos, sin embargo, el tiempo que tarda el algoritmo puede ser incluso más rápido de lo que indica este análisis del peor caso. Por ejemplo, en el caso promedio para grafos aleatorios bipartitos dispersos , Bast et al. (2006) (mejorando un resultado anterior de Motwani 1994 ) demostraron que con alta probabilidad todos los emparejamientos no óptimos tienen caminos de aumento de longitud logarítmica . Como consecuencia, para estos grafos, el algoritmo de Hopcroft-Karp tardaO(registro|V|){\displaystyle O(\log |V|)}fases yO(|mi|registro|V|){\displaystyle O(|E|\log |V|)}tiempo total.

Comparación con otros algoritmos de emparejamiento bipartito

Para grafos dispersos , el algoritmo de Hopcroft-Karp sigue teniendo el mejor rendimiento conocido en el peor de los casos, pero para grafos densos (|mi|=Ω(|V|2){\displaystyle |E|=\Omega (|V|^{2})}) un algoritmo más reciente de Alt et al. (1991) logra un límite de tiempo ligeramente mejor,O(|V|1.5|mi|registro|V|){\displaystyle O\left(|V|^{1.5}{\sqrt {\frac {|E|}{\log |V|}}}\right)}Su algoritmo se basa en el uso de un algoritmo de flujo máximo de reetiquetado y, cuando la correspondencia creada por este algoritmo se acerca al óptimo, se cambia al método de Hopcroft-Karp.

Varios autores han realizado comparaciones experimentales de algoritmos de emparejamiento bipartito. Sus resultados, en general, tienden a mostrar que el método de Hopcroft-Karp no es tan bueno en la práctica como en la teoría: es superado tanto por estrategias más simples de búsqueda en amplitud y en profundidad para encontrar caminos de aumento, como por técnicas de reetiquetado. [ 7 ]

Grafos no bipartitos

La misma idea de encontrar un conjunto máximo de caminos de aumento más cortos también funciona para encontrar emparejamientos de cardinalidad máxima en grafos no bipartitos, y por las mismas razones los algoritmos basados ​​en esta idea tomanO(|V|){\displaystyle O({\sqrt {|V|}})}fases. Sin embargo, para grafos no bipartitos, la tarea de encontrar los caminos de aumento dentro de cada fase es más difícil. Basándose en el trabajo de varios predecesores más lentos, Micali y Vazirani (1980) mostraron cómo implementar una fase en tiempo lineal, lo que resultó en un algoritmo de emparejamiento no bipartito con el mismo límite de tiempo que el algoritmo de Hopcroft-Karp para grafos bipartitos. La técnica de Micali-Vazirani es compleja, y sus autores no proporcionaron pruebas completas de sus resultados; posteriormente, Peterson y Loui (1988) publicaron una "exposición clara" y otros autores describieron métodos alternativos. [ 8 ] En 2012, Vazirani ofreció una nueva prueba simplificada del algoritmo de Micali-Vazirani. [ 9 ]

Pseudocódigo

/* G = U ∪ V ∪ {NIL} donde U y V son los lados izquierdo y derecho del grafo bipartito y NIL es un vértice nulo especial */ La función BFS() es para cada u en U hacer si Pair_U[u] = NIL entonces Dist[u] := 0 Encolar(Q, u) demás Dist[u] := ∞ Dist[NIL] := ∞ mientras Empty(Q) = falso hacer u := Dequeue(Q) Si Dist[u] < Dist[NIL] entonces para cada v en Adj[u] hacer si Dist[Pair_V[v]] = ∞ entonces Dist[Pair_V[v]] := Dist[u] + 1 Encolar(Q, Par_V[v]) devolver Dist[NIL] ≠ ∞ La función DFS(u) es si u ≠ NIL entonces para cada v en Adj[u] hacer si Dist[Pair_V[v]] = Dist[u] + 1 entonces si DFS(Pair_V[v]) = verdadero entonces Par_V[v] := u Par_U[u] := v devolver verdadero Dist[u] := ∞ devolver falso devolver verdadero La función Hopcroft-Karp es para cada u en U hacer Pair_U[u] := NIL para cada v en V hacer Pair_V[v] := NIL coincidencia := 0 mientras BFS() = verdadero hacer para cada u en U hacer si Pair_U[u] = NIL entonces si DFS(u) = verdadero entonces coincidencia := coincidencia + 1 coincidencia de retorno
Ejecución en un gráfico de ejemplo que muestra el gráfico de entrada y la coincidencia después de la iteración intermedia 1 y la iteración final 2.

Explicación

Sea que los vértices de nuestro grafo estén particionados en Uy V, y consideremos un emparejamiento parcial, como lo indican las tablas y que contienen el único vértice con el que se empareja cada vértice de Pair_Uy de , o para los vértices no emparejados. La idea clave es agregar dos vértices ficticios en cada lado del grafo: uDummy conectado a todos los vértices no emparejados en y vDummy conectado a todos los vértices no emparejados en . Ahora, si ejecutamos una búsqueda en anchura (BFS) desde uDummy hasta vDummy, podemos obtener los caminos de longitud mínima que conectan los vértices actualmente no emparejados en con los vértices actualmente no emparejados en . Nótese que, como el grafo es bipartito, estos caminos siempre alternan entre vértices en y vértices en , y requerimos en nuestra BFS que al ir de a , siempre seleccionemos una arista emparejada. Si llegamos a un vértice no emparejado de , entonces terminamos en vDummy y la búsqueda de caminos en la BFS termina. En resumen, el BFS comienza en los vértices no emparejados en , va a todos sus vecinos en , si todos están emparejados, entonces regresa a los vértices en con los que todos estos vértices están emparejados (y que no fueron visitados antes), luego va a todos los vecinos de estos vértices, etc., hasta que uno de los vértices alcanzados en no esté emparejado.Pair_VUVNILUVUVUVVUVUVUV

Obsérvese en particular que BFS marca los nodos no coincidentes de Ucon distancia 0, y luego incrementa la distancia cada vez que regresa a U. Esto garantiza que los caminos considerados en BFS tengan la longitud mínima para conectar vértices no coincidentes de Ucon vértices no coincidentes de Vmientras siempre regresa de Va Uen aristas que actualmente forman parte del emparejamiento. En particular, al NILvértice especial, que corresponde a vDummy, se le asigna una distancia finita, por lo que la función BFS devuelve verdadero si y solo si se ha encontrado algún camino. Si no se ha encontrado ningún camino, entonces no quedan caminos de aumento y el emparejamiento es máximo.

Si BFS devuelve verdadero, podemos proceder a actualizar el emparejamiento de vértices en los caminos de longitud mínima encontrados desde Uhasta V: lo hacemos usando una búsqueda en profundidad (DFS). Nótese que cada vértice en Ven dicho camino, excepto el último, está actualmente emparejado. Por lo tanto, podemos explorar con DFS, asegurándonos de que los caminos que seguimos correspondan a las distancias calculadas en BFS. Actualizamos a lo largo de cada uno de dichos caminos eliminando del emparejamiento todos los bordes del camino que actualmente están en el emparejamiento, y agregando al emparejamiento todos los bordes del camino que actualmente están en el emparejamiento: como este es un camino de aumento (el primer y último borde del camino no formaban parte del emparejamiento, y el camino alternaba entre bordes emparejados y no emparejados), entonces esto aumenta el número de bordes en el emparejamiento. Esto es lo mismo que reemplazar el emparejamiento actual por la diferencia simétrica entre el emparejamiento actual y todo el camino.

Tenga en cuenta que el código garantiza que todos los caminos de aumento que consideramos sean disjuntos en vértices. De hecho, después de hacer la diferencia simétrica para un camino, ninguno de sus vértices podría considerarse nuevamente en el DFS, simplemente porque Dist[Pair_V[v]]no será igual a Dist[u] + 1(sería exactamente Dist[u]).

Observe también que el DFS no visita el mismo vértice varias veces. Esto se debe a las siguientes líneas:

Dist[u] = ∞ devolver falso

Cuando no pudimos encontrar ningún camino de aumento más corto desde un vértice u, entonces el DFS marca el vértice uestableciéndolo Dist[u]en infinito, de modo que estos vértices no se visiten de nuevo.

Una última observación es que en realidad no necesitamos uDummy: su función es simplemente colocar todos los vértices no coincidentes Uen la cola cuando iniciamos la búsqueda en amplitud (BFS). En cuanto a vDummy, se denota como NILen el pseudocódigo anterior.

Véase también

Notas

Referencias

  • Ahuja, Ravindra K.; Magnanti , Thomas L.; Orlin , James B. (1993), Flujos de red: teoría, algoritmos y aplicaciones , Prentice-Hall.
  • Alt, H.; Blum, N.; Mehlhorn, K. ; Paul, M. (1991), "Cálculo de un emparejamiento de cardinalidad máxima en un grafo bipartito en tiempoO(norte1.5metroregistronorte){\displaystyle \scriptstyle O\left(n^{1.5}{\sqrt {\frac {m}{\log n}}}\right)}", Information Processing Letters , 37 (4): 237– 240, doi : 10.1016/0020-0190(91)90195-N.
  • Annamalai, Chidambaram (2018), "Finding perfect matchings in bipartite hypergraphs", Combinatorica , 38 (6): 1285– 1307, arXiv : 1509.07007 , doi : 10.1007/s00493-017-3567-2 , MR 3910876 , S2CID 1997334  
  • Bast, Holger; Mehlhorn, Kurt; Schäfer, Guido; Tamaki, Hisao (2006), "Los algoritmos de emparejamiento son rápidos en grafos aleatorios dispersos", Theory of Computing Systems , 39 (1): 3–14 , CiteSeerX 10.1.1.395.6643 , doi : 10.1007/s00224-005-1254-y , MR 2189556 , S2CID 9321036   
  • Chang, S. Frank; McCormick, S. Thomas (1990), Una implementación más rápida de un algoritmo de coincidencia de cardinalidad bipartita , Informe técnico 90-MSC-005, Facultad de Comercio y Administración de Empresas, Universidad de Columbia Británica. Según lo citado por Setúbal (1996) .
  • Darby-Dowman, Kenneth (1980), La explotación de la escasez en problemas de programación lineal a gran escala: estructuras de datos y algoritmos de reestructuración , tesis doctoral, Universidad de Brunel.. Según lo citado por Setúbal (1996) .
  • Dinitz, Yefim (2006), "El algoritmo de Dinitz: la versión original y la versión de Even", en Goldreich, Oded ; Rosenberg, Arnold L .; Selman, Alan L. (eds.), Theoretical Computer Science: Essays in Memory of Shimon Even (PDF) , Lecture Notes in Computer Science, vol.  3895, Berlín y Heidelberg: Springer, pp. 218–240 , doi : 10.1007/11685654_10 , ISBN  978-3-540-32880-3.
  • Edmonds, Jack (1965), "Caminos, árboles y flores", Revista canadiense de matemáticas , 17 : 449–467 , doi : 10.4153/CJM-1965-045-4 , MR 0177907 , S2CID 18909734  .
  • Gabow, Harold N. (2017), "El enfoque de emparejamiento ponderado para el emparejamiento de cardinalidad máxima", Fundamenta Informaticae , 154 ( 1–4 ): 109–130 , arXiv : 1703.03998 , doi : 10.3233/FI-2017-1555 , MR 3690573 , S2CID 386509  
  • Gabow, Harold N.; Tarjan , Robert E. (1991), "Algoritmos de escalado más rápidos para problemas generales de emparejamiento de grafos", Journal of the ACM , 38 (4): 815–853 , doi : 10.1145/115234.115366 , S2CID 18350108 .
  • Hopcroft, John E .; Karp, Richard M. (1973), "Un algoritmo n 5/2 para emparejamientos máximos en grafos bipartitos", SIAM Journal on Computing , 2 (4): 225– 231, doi : 10.1137/0202019Anunciado previamente en el 12º Simposio Anual sobre Teoría de Conmutación y Autómatas, 1971.
  • Karzanov, AV (1973), "Una estimación exacta de un algoritmo para encontrar un flujo máximo, aplicado al problema de los representantes", Problemas en Cibernética , 5 : 66–70Anunciado previamente en el Seminario de Matemáticas Combinatorias (Moscú, 1971).
  • Micali, S .; Vazirani, VV (1980), "UnO(|V||mi|){\displaystyle \scriptstyle O({\sqrt {|V|}}\cdot |E|)}Algoritmo para encontrar el emparejamiento máximo en grafos generales", Actas del 21.º Simposio IEEE sobre Fundamentos de la Informática , págs. 17-27 , doi : 10.1109/SFCS.1980.12 , S2CID 27467816  .
  • Peterson, Paul A.; Loui, Michael C. (noviembre de 1988), "El algoritmo general de coincidencia máxima de Micali y Vazirani", Algorithmica , 3 ( 1– 4): 511– 533, CiteSeerX 10.1.1.228.9625 , doi : 10.1007/BF01762129 , ISSN 1432-0541 , S2CID 16820   .
  • Motwani, Rajeev (1994), "Análisis del caso promedio de algoritmos para emparejamientos y problemas relacionados", Journal of the ACM , 41 (6): 1329– 1356, doi : 10.1145/195613.195663 , S2CID 2968208 .
  • Setubal, João C. (1993), "Nuevos resultados experimentales para el emparejamiento bipartito", Proc. Netflow93 , Departamento de Informática, Univ. de Pisa, págs. 211-216 . Según lo citado por Setúbal (1996) .
  • Setúbal, João C. (1996), Resultados experimentales secuenciales y paralelos con algoritmos de emparejamiento bipartito , Informe técnico IC-96-09, Instituto de Computación, Universidad de Campinas, CiteSeerX 10.1.1.48.3539 .
  • Tarjan, Robert Endre (1983). Estructuras de datos y algoritmos de red . Serie de conferencias regionales CBMS-NSF en matemáticas aplicadas. Sociedad de Matemáticas Industriales y Aplicadas. doi : 10.1137/1.9781611970265 . ISBN 978-0-89871-187-5.
  • Vazirani, Vijay (2012), Una definición mejorada de Blossoms y una prueba más simple del algoritmo de emparejamiento MV , CoRR abs/1210.4594, arXiv : 1210.4594 , Bibcode : 2012arXiv1210.4594V.