Articulo de referencia

El algoritmo de Edmonds

En teoría de grafos , el algoritmo de Edmonds o algoritmo de Chu-Liu/Edmonds es un algoritmo para encontrar una arborescencia de expansión de peso mínimo (a veces llamada ramifi...

En teoría de grafos , el algoritmo de Edmonds o algoritmo de Chu-Liu/Edmonds es un algoritmo para encontrar una arborescencia de expansión de peso mínimo (a veces llamada ramificación óptima ). [ 1 ] Es el análogo dirigido del problema del árbol de expansión mínimo . El algoritmo fue propuesto independientemente primero por Yoeng-Jin Chu y Tseng-Hong Liu (1965) y luego por Jack Edmonds (1967).

Algoritmo

Descripción

El algoritmo toma como entrada un grafo dirigido.D=V,mi{\displaystyle D=\langle V,E\rangle }dóndeV{\displaystyle V}es el conjunto de nodos ymi{\displaystyle E}es el conjunto de aristas dirigidas, un vértice distinguidorV{\displaystyle r\in V}llamada raíz y un peso de valor realw(mi){\displaystyle w(e)}para cada bordemimi{\displaystyle e\in E}Devuelve una arborescencia que se extiendeA{\displaystyle A}enraizado enr{\displaystyle r}de peso mínimo, donde el peso de una arborescencia se define como la suma de los pesos de sus bordes,w(A)=miAw(mi){\displaystyle w(A)=\sum _{e\in A}{w(e)}}.

El algoritmo tiene una descripción recursiva.F(D,r,w){\displaystyle f(D,r,w)}denota la función que devuelve una arborescencia de expansión enraizada enr{\displaystyle r}de peso mínimo. Primero eliminamos cualquier borde demi{\displaystyle E}cuyo destino esr{\displaystyle r}También podemos reemplazar cualquier conjunto de aristas paralelas (aristas entre el mismo par de vértices en la misma dirección) por una sola arista con un peso igual al mínimo de los pesos de estas aristas paralelas.

Ahora, para cada nodov{\displaystyle v}aparte de la raíz, encuentra la arista entrante av{\displaystyle v}de menor peso (los empates se resuelven arbitrariamente). Denotemos el origen de esta arista porπ(v){\displaystyle \pi (v)}. Si el conjunto de aristasPAG={(π(v),v)vV{r}}{\displaystyle P=\{(\pi (v),v)\mid v\in V\setminus \{r\}\}}no contiene ningún ciclo, entoncesF(D,r,w)=PAG{\displaystyle f(D,r,w)=P}.

De lo contrario,PAG{\displaystyle P}contiene al menos un ciclo. Elija arbitrariamente uno de estos ciclos y llámelodo{\displaystyle C}Ahora definimos un nuevo grafo dirigido ponderado.D=V,mi{\displaystyle D^{\prime }=\langle V^{\prime },E^{\prime }\rangle }en el que el ciclodo{\displaystyle C}se "contrae" en un nodo de la siguiente manera:

Los nodos deV{\displaystyle V^{\prime }}son los nodos deV{\displaystyle V}no endo{\displaystyle C}más un nuevo nodo denominadovdo{\displaystyle v_{C}}.

  • Si(,v){\displaystyle (u,v)}es una ventaja enmi{\displaystyle E}condo{\displaystyle u\notin C} yvdo{\displaystyle v\in C}(un borde que entra en el ciclo), luego incluir enmi{\displaystyle E^{\prime }}un nuevo bordemi=(,vdo){\displaystyle e=(u,v_{C})}y definirw(mi)=w(,v)w(π(v),v){\displaystyle w^{\prime }(e)=w(u,v)-w(\pi (v),v)}.
  • Si(,v){\displaystyle (u,v)}es una ventaja enmi{\displaystyle E}condo{\displaystyle u\in C}yvdo{\displaystyle v\notin C}(un borde que se aleja del ciclo), luego incluir enmi{\displaystyle E^{\prime }}un nuevo bordemi=(vdo,v){\displaystyle e=(v_{C},v)}y definirw(mi)=w(,v){\displaystyle w^{\prime }(e)=w(u,v)}.
  • Si(,v){\displaystyle (u,v)}es una ventaja enmi{\displaystyle E}condo{\displaystyle u\notin C}yvdo{\displaystyle v\notin C}(un borde no relacionado con el ciclo), luego incluir enmi{\displaystyle E^{\prime }}un nuevo bordemi=(,v){\displaystyle e=(u,v)}y definirw(mi)=w(,v){\displaystyle w^{\prime }(e)=w(u,v)}.

Para cada arista enmi{\displaystyle E^{\prime }}, recordamos qué borde enmi{\displaystyle E}corresponde a.

Ahora encuentra una arborescencia de mínima extensión.A{\displaystyle A^{\prime }}deD{\displaystyle D^{\prime }}utilizando una llamada aF(D,r,w){\displaystyle f(D^{\prime },r,w^{\prime })}. DesdeA{\displaystyle A^{\prime }}es una arborescencia de expansión, cada vértice tiene exactamente una arista entrante.(,vdo){\displaystyle (u,v_{C})}ser la ventaja entrante única paravdo{\displaystyle v_{C}}enA{\displaystyle A^{\prime }}Este borde corresponde a un borde(,v)mi{\displaystyle (u,v)\in E}convdo{\displaystyle v\in C}. Quitar el borde(π(v),v){\displaystyle (\pi (v),v)}dedo{\displaystyle C}, rompiendo el ciclo. Marque cada borde restante endo{\displaystyle C}. Para cada arista enA{\displaystyle A^{\prime }}, marca su borde correspondiente enmi{\displaystyle E}Ahora definimos.F(D,r,w){\displaystyle f(D,r,w)}ser el conjunto de aristas marcadas, que forman una arborescencia de extensión mínima.

Observa queF(D,r,w){\displaystyle f(D,r,w)}se define en términos deF(D,r,w){\displaystyle f(D^{\prime },r,w^{\prime })}, conD{\displaystyle D^{\prime }}tener estrictamente menos vértices queD{\displaystyle D}. EncontrarF(D,r,w){\displaystyle f(D,r,w)}para un grafo de un solo vértice es trivial (es simplementeD{\displaystyle D}por sí mismo), por lo que se garantiza que el algoritmo recursivo terminará.

Tiempo de ejecución

El tiempo de ejecución de este algoritmo esO(miV){\displaystyle O(EV)}. Una implementación más rápida del algoritmo debido a Robert Tarjan se ejecuta en tiempoO(miregistroV){\displaystyle O(E\log V)}para grafos dispersos yO(V2){\displaystyle O(V^{2})}para grafos densos. Esto es tan rápido como el algoritmo de Prim para un árbol de expansión mínima no dirigido. En 1986, Gabow , Galil , Spencer y Tarjan produjeron una implementación más rápida, con tiempo de ejecuciónO(mi+VregistroV){\displaystyle O(E+V\log V)}.

Referencias

  1. El algoritmo es aplicable para encontrar un bosque de expansión mínima con raíces dadas. Sin embargo, al buscar el bosque de expansión mínima entre todosk{\displaystyle k}-componente que abarca bosques, surge un multiplicador en la complejidad del algoritmo doVk{\displaystyle C_{V}^{k}}, correspondiente a la elección de un subconjunto de vértices designados como raíces. Esto lo hace inadecuado para tal tarea. Incluso al construir un árbol de expansión mínima, independientemente de la raíz, el algoritmo debe ser utilizado V{\displaystyle V}veces, asignando secuencialmente cada vértice como raíz. En ( https://link.springer.com/article/10.1007/s10958-023-06666-w ) se presenta un algoritmo eficiente para encontrar bosques de expansión mínima que resuelve el problema de asignación de raíces. Este algoritmo construye una secuencia de mínimosk{\displaystyle k}-componente que abarca bosques para todosk{\displaystyle k}hasta el árbol de expansión mínima. El algoritmo de Chu-Liu/Edmonds es un componente del mismo.
  • Chu, Yeong-Jin; Liu, Tseng-Hong (1965), "Sobre la arborescencia más corta de un grafo dirigido" (PDF) , Scientia Sinica , XIV ( 10): 1396–1400
  • Edmonds, J. (1967), "Ramificaciones óptimas", Journal of Research of the National Bureau of Standards Section B , 71B (4): 233– 240, doi : 10.6028/jres.071b.032
  • Tarjan, RE (1977), "Finding Optimum Branchings", Networks , 7 : 25–35 , doi : 10.1002/net.3230070103
  • Camerini, PM; Fratta, L.; Maffioli, F. (1979), "Una nota sobre cómo encontrar ramificaciones óptimas", Networks , 9 (4): 309– 312, doi : 10.1002/net.3230090403
  • Gibbons, Alan (1985), Teoría algorítmica de grafos , Cambridge University Press, ISBN 0-521-28881-9
  • Gabow, HN ; Galil, Z .; Spencer, T.; Tarjan, RE (1986), "Algoritmos eficientes para encontrar árboles de expansión mínima en grafos dirigidos y no dirigidos", Combinatorica , 6 (2): 109–122 , doi : 10.1007/bf02579168 , S2CID 35618095 
  • Buslov, V. (2023), "Algoritmo para la construcción secuencial de bosques dirigidos mínimos de expansión", Journal of Mathematical Sciences , 275 : 117–129 , doi : 10.1007/s10958-023-06666-w
  • Algoritmo de Edmonds (edmonds-alg) : una implementación del algoritmo de Edmonds escrita en C++ y con licencia MIT . Este código fuente utiliza la implementación de Tarjan para el grafo denso.
  • NetworkX, una biblioteca de Python distribuida bajo la licencia BSD , tiene una implementación del algoritmo de Edmonds .
  • (spanning-forest-builder 0.0.2) – Biblioteca para construir bosques orientados de peso mínimo.