fbpx
Wikipedia

Algoritmo de Emparejamiento de Edmonds

El Algoritmo del Blossom o Algoritmo de Emparejamiento de Edmonds es un algoritmo de teoría de grafos para construir emparejamientos máximos en grafos. El algoritmo fue desarrollado por Jack Edmonds en 1961,[1]​ y publicado en 1965.[2]​ El emparejamiento máximo es construido iterativamente mejorando el emparejamiento actual a través de caminos m-incrementos mientras al menos exista uno. La idea esencial del algoritmo es que un ciclo de longitud impar (blossom) es contraído en un solo vértice para luego continuar la búsqueda de caminos m-incrementos en el grafo resultante. La idea de contraer los ciclos de longitud impar se debe a que si no se hiciera el mismo algoritmo de búsqueda de caminos m-incrementos al entrar en uno de estos ciclos y salir pudiera reportar falsos positivos.

La importancia del algoritmo radicó en que dio la primera prueba de que un emparejamiento máximo puede ser encontrado en tiempo polinomial.

Definiciones

Se mantienen los nombres de las definiciones en inglés para mayor entendimiento con la literatura. Si se hiciera una traducción literal entonces 'blossom' sería capullo, 'stem' sería tallo y 'flower' sería flor. Edmonds realiza una analogía entre la estructura de las flores y las estructuras utilizadas por el algoritmo.

Vértice saturado

Un vértice se dice saturado por un emparejamiento, cuando él es extremo de alguna arista del emparejamiento.

Blossom

Un blossom   sobre un emparejamiento   en un grafo  , es un ciclo de longitud impar que cumple que   es un emparejamiento máximo en  . (Obsérvese   deja uno y sólo un vértice   sin estar emparejado).

Stem

Un stem sobre un emparejamiento   un grafo   es un vértice no saturado por   o un camino m-alternativo con un extremo no saturado y el otro sí.

Flower

Se define como flower a un blossom y un stem interceptados en solo uno de los extremos del stem (vértice   no saturado del blossom).

Constracción de un blossom en un grafo

Sea   un blossom de una flower   sobre un emparejamiento   en un grafo   se define como contracción de   en el grafo  , al grafo   que resulta de sustituir a   por un vértice ficticio  , el cual es adyacente a todos los vértices   adyacentes a los vértices de   y se denota como  .

Contracción de un blossom dado un emparejamiento

Sea   un blossom de una flower   sobre un emparejamiento   en un grafo   se define como contracción de   en el emparejamiento  , al emparejamiento   (  sería el vértice ficticio del blossom). Se denote  .

Teorema

Sea   un blossom de una flower   sobre un emparejamiento   en un grafo   entonces:   es un emparejamiento máximo en   si y solo si   es un emparejamiento en  .

Descontracción

La parte de la demostración más interesante del algoritmo es probar que si   tiene un camino m-incremento   entonces   tiene un camino m-incremento   semejante a  .

Para la demostración se separan varios casos:

  1. El camino m-incremento en   no contiene ningún vértice ficticio, entonces el grafo   contiene el mismo camino m-incremento sin modificación.
  2. El camino m-incremento en   contiene a un vértice ficticio (sin pérdida de generalidad), este a su vez se subdivide en dos casos:
    1. El vértice ficticio no se encuentra en un extremo del camino m-incremento  , entonces en   encontraremos el siguiente camino m-incremento   , el camino m – alternativo   existe como consecuencia de la definición de blossom. Supongamos que no exista, esto sería si en algún momento no se puede alternar entre emparejado-no emparejado, la única forma posible que ocurra esto en un emparejamiento correcto es emparejado – no emparejado – no emparejado, esto por la definición de blossom no puede ocurrir ya que el único vértice que puede no estar emparejado con uno dentro del blossom es  , sino no se cumpliría que   sea un emparejamiento máximo en  . El otro problema que pudiera ocurrir es que al salir del blossom por la arista   hallamos escogido un camino que seleccionaba como arista anterior a   una que no pertenece al emparejamiento, cuestión que no crearía un camino m-incremento, esto se resuelve escogiendo el otro camino posible de   del blossom (existen dos debido a que el blossom es un ciclo).


    1. El vértice ficticio se encuentra en un extremo del camino m-incremento  , donde  , entonces en   encontraremos el siguiente camino m-incremento  , el camino m – alternativo   existe como consecuencia de la definición de blossom (Ver el caso anterior). (Observación: este blossom no puede tener ningún vértice emparejado con uno exterior al blossom por lo tanto queda uno y solo uno no saturado por el emparejamiento).


Algoritmo

El algoritmo para encontrar caminos m-incrementos utiliza una estructura de datos llamada bosque, cuyos árboles individuales corresponden a partes específicas del grafo. En cada iteración del algoritmo ocurre algunas de las siguientes opciones (1) encuentra un camino m-incremento, (2) encuentra un blossom, lo comprime y comienza la búsqueda en el grafo resultante o (3) concluye al no encontrar caminos m-incrementos.

01 Path FindAugmentingPath (Graph G, Match M) { 02 Forest F = new Forest(); // Crea un bosque vacío 03 Queue vertices = new Queue(); // Cola de procesado de vértices 04 for each (v∈V no saturado por M){ 05 F.NewTree(new Tree(v)); // Se agrega nuevo árbol con raíz v al bosque 06 vertices.enqueue(v); 07 } 08 Vertex v = vertices.dequeue(); 09 while (v != NULL ){ // distancia a la raíz par 10 Queue adjacents = new Queue(); // Cola de procesado de adyacentes. 11 for each ({v,w}∈E && {v,w}∉M} 12 adjacents.enqueue(w); 13 w = adjacents.dequeue(); 14 while (w != NULL) 15 if (w∉F){ // Si w está emparejado 16 F[root(v)].AddEdges({v,w}, {w,x}); // x emparejado con w en M 17 vertices.enqueue(x); 18 } 19 else 20 if (distance(w, root(w)) % 2 = 0){ // distancia par a su raíz 21 if (root(v) ≠ root(w)) // camino m-incremento. 22 return new Path(root(v),…, v, w, …root(w)); 23 else {// encontramos un blossom 24 Blossom B = DetectBlossom({v,w}); 25 Graph G’ = G/B; 26 Match M’ = M/B; 27 Path P’, P; 28 P’ = FindAugmentingPath(G’, M’); 29 if (P’ != NULL) 30 P = FixContractedPath(G,B,P’); 31 return P; 32 } 33 w = adjacents.dequeue(); 34 } 35 } 36 vertices.dequeue(); 37 } 38 return NULL; 39 } 

Coste computacional

El ciclo de la línea 04 agrega los vértices no saturados para un costo O(|V|), el ciclo de la línea 14 se ejecuta |E| veces y por cada iteración suponiendo que se encuentra un blossom este se contrae en O(|V|) y se llama recursivamente al mismo algoritmo, partiendo de que pueden haber a lo sumo   blossoms obtenemos un costo de  .


Referencias

  1. Edmonds, Jack (1991), «A glimpse of heaven», en J.K. Lenstra, A.H.G. Rinnooy Kan, A. Schrijver, ed., ed., History of Mathematical Programming --- A Collection of Personal Reminiscences, CWI, Amsterdam and North-Holland, Amsterdam, pp. 32-54 .
  2. Edmonds, Jack (1965). «Paths, trees, and flowers». Canad. J. Math. 17: 449-467. doi:10.4153/CJM-1965-045-4. 

algoritmo, emparejamiento, edmonds, algoritmo, blossom, algoritmo, teoría, grafos, para, construir, emparejamientos, máximos, grafos, algoritmo, desarrollado, jack, edmonds, 1961, publicado, 1965, emparejamiento, máximo, construido, iterativamente, mejorando, . El Algoritmo del Blossom o Algoritmo de Emparejamiento de Edmonds es un algoritmo de teoria de grafos para construir emparejamientos maximos en grafos El algoritmo fue desarrollado por Jack Edmonds en 1961 1 y publicado en 1965 2 El emparejamiento maximo es construido iterativamente mejorando el emparejamiento actual a traves de caminos m incrementos mientras al menos exista uno La idea esencial del algoritmo es que un ciclo de longitud impar blossom es contraido en un solo vertice para luego continuar la busqueda de caminos m incrementos en el grafo resultante La idea de contraer los ciclos de longitud impar se debe a que si no se hiciera el mismo algoritmo de busqueda de caminos m incrementos al entrar en uno de estos ciclos y salir pudiera reportar falsos positivos La importancia del algoritmo radico en que dio la primera prueba de que un emparejamiento maximo puede ser encontrado en tiempo polinomial Indice 1 Definiciones 1 1 Vertice saturado 1 2 Blossom 1 3 Stem 1 4 Flower 1 5 Constraccion de un blossom en un grafo 1 6 Contraccion de un blossom dado un emparejamiento 2 Teorema 2 1 Descontraccion 3 Algoritmo 3 1 Coste computacional 4 ReferenciasDefiniciones EditarSe mantienen los nombres de las definiciones en ingles para mayor entendimiento con la literatura Si se hiciera una traduccion literal entonces blossom seria capullo stem seria tallo y flower seria flor Edmonds realiza una analogia entre la estructura de las flores y las estructuras utilizadas por el algoritmo Vertice saturado Editar Un vertice se dice saturado por un emparejamiento cuando el es extremo de alguna arista del emparejamiento Blossom Editar Un blossom B displaystyle B sobre un emparejamiento M displaystyle M en un grafo G V E displaystyle G V E es un ciclo de longitud impar que cumple que M E B displaystyle M cap E B es un emparejamiento maximo en B displaystyle B Observese M E B displaystyle M cap E B deja uno y solo un vertice b displaystyle b sin estar emparejado Stem Editar Un stem sobre un emparejamiento M displaystyle M un grafo G V E displaystyle G V E es un vertice no saturado por M displaystyle M o un camino m alternativo con un extremo no saturado y el otro si Flower Editar Se define como flower a un blossom y un stem interceptados en solo uno de los extremos del stem vertice b displaystyle b no saturado del blossom Constraccion de un blossom en un grafo Editar Sea B displaystyle B un blossom de una flower F displaystyle F sobre un emparejamiento M displaystyle M en un grafo G displaystyle G se define como contraccion de B displaystyle B en el grafo G displaystyle G al grafo G displaystyle G que resulta de sustituir a B displaystyle B por un vertice ficticio b displaystyle b el cual es adyacente a todos los vertices v i displaystyle v i adyacentes a los vertices de B displaystyle B y se denota como G B displaystyle G B Contraccion de un blossom dado un emparejamiento Editar Sea B displaystyle B un blossom de una flower F displaystyle F sobre un emparejamiento M displaystyle M en un grafo G displaystyle G se define como contraccion de B displaystyle B en el emparejamiento M displaystyle M al emparejamiento M a b M a b B v B b B displaystyle M a b in M vee a b not in B vee v in B wedge b not in B v displaystyle v seria el vertice ficticio del blossom Se denote M B displaystyle M B Teorema EditarSea B displaystyle B un blossom de una flower F displaystyle F sobre un emparejamiento M displaystyle M en un grafo G displaystyle G entonces M displaystyle M es un emparejamiento maximo en G displaystyle G si y solo si M B displaystyle M B es un emparejamiento en G B displaystyle G B Descontraccion Editar La parte de la demostracion mas interesante del algoritmo es probar que si G B G displaystyle G B G tiene un camino m incremento p v 0 v t displaystyle p v 0 ldots v t entonces G displaystyle G tiene un camino m incremento p displaystyle p semejante a p displaystyle p Para la demostracion se separan varios casos El camino m incremento en G displaystyle G no contiene ningun vertice ficticio entonces el grafo G displaystyle G contiene el mismo camino m incremento sin modificacion El camino m incremento en G displaystyle G contiene a un vertice ficticio sin perdida de generalidad este a su vez se subdivide en dos casos El vertice ficticio no se encuentra en un extremo del camino m incremento p displaystyle p entonces en G displaystyle G encontraremos el siguiente camino m incremento v 0 w w u u v t displaystyle v 0 rightarrow ldots rightarrow w rightarrow w rightarrow ldots rightarrow u rightarrow u rightarrow ldots rightarrow v t el camino m alternativo w u displaystyle w rightarrow ldots rightarrow u existe como consecuencia de la definicion de blossom Supongamos que no exista esto seria si en algun momento no se puede alternar entre emparejado no emparejado la unica forma posible que ocurra esto en un emparejamiento correcto es emparejado no emparejado no emparejado esto por la definicion de blossom no puede ocurrir ya que el unico vertice que puede no estar emparejado con uno dentro del blossom es u displaystyle u sino no se cumpliria que M E B displaystyle M cap E B sea un emparejamiento maximo en B displaystyle B El otro problema que pudiera ocurrir es que al salir del blossom por la arista w w displaystyle w w hallamos escogido un camino que seleccionaba como arista anterior a w w displaystyle w w una que no pertenece al emparejamiento cuestion que no crearia un camino m incremento esto se resuelve escogiendo el otro camino posible de u w displaystyle u w del blossom existen dos debido a que el blossom es un ciclo El vertice ficticio se encuentra en un extremo del camino m incremento p displaystyle p donde v t v displaystyle v t v entonces en G displaystyle G encontraremos el siguiente camino m incremento v 0 u u v displaystyle v 0 rightarrow ldots rightarrow u rightarrow u rightarrow ldots rightarrow v el camino m alternativo u v displaystyle u rightarrow ldots rightarrow v existe como consecuencia de la definicion de blossom Ver el caso anterior Observacion este blossom no puede tener ningun vertice emparejado con uno exterior al blossom por lo tanto queda uno y solo uno no saturado por el emparejamiento Algoritmo EditarEl algoritmo para encontrar caminos m incrementos utiliza una estructura de datos llamada bosque cuyos arboles individuales corresponden a partes especificas del grafo En cada iteracion del algoritmo ocurre algunas de las siguientes opciones 1 encuentra un camino m incremento 2 encuentra un blossom lo comprime y comienza la busqueda en el grafo resultante o 3 concluye al no encontrar caminos m incrementos 01 Path FindAugmentingPath Graph G Match M 02 Forest F new Forest Crea un bosque vacio 03 Queue vertices new Queue Cola de procesado de vertices 04 for each v V no saturado por M 05 F NewTree new Tree v Se agrega nuevo arbol con raiz v al bosque 06 vertices enqueue v 07 08 Vertex v vertices dequeue 09 while v NULL distancia a la raiz par 10 Queue adjacents new Queue Cola de procesado de adyacentes 11 for each v w E amp amp v w M 12 adjacents enqueue w 13 w adjacents dequeue 14 while w NULL 15 if w F Si w esta emparejado 16 F root v AddEdges v w w x x emparejado con w en M 17 vertices enqueue x 18 19 else 20 if distance w root w 2 0 distancia par a su raiz 21 if root v root w camino m incremento 22 return new Path root v v w root w 23 else encontramos un blossom 24 Blossom B DetectBlossom v w 25 Graph G G B 26 Match M M B 27 Path P P 28 P FindAugmentingPath G M 29 if P NULL 30 P FixContractedPath G B P 31 return P 32 33 w adjacents dequeue 34 35 36 vertices dequeue 37 38 return NULL 39 Coste computacional Editar El ciclo de la linea 04 agrega los vertices no saturados para un costo O V el ciclo de la linea 14 se ejecuta E veces y por cada iteracion suponiendo que se encuentra un blossom este se contrae en O V y se llama recursivamente al mismo algoritmo partiendo de que pueden haber a lo sumo O V displaystyle O V blossoms obtenemos un costo de O V 4 displaystyle O V 4 Referencias Editar Edmonds Jack 1991 A glimpse of heaven en J K Lenstra A H G Rinnooy Kan A Schrijver ed ed History of Mathematical Programming A Collection of Personal Reminiscences CWI Amsterdam and North Holland Amsterdam pp 32 54 Edmonds Jack 1965 Paths trees and flowers Canad J Math 17 449 467 doi 10 4153 CJM 1965 045 4 Obtenido de https es wikipedia org w index php title Algoritmo de Emparejamiento de Edmonds amp oldid 140164790, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos