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óndees el conjunto de nodos yes el conjunto de aristas dirigidas, un vértice distinguidollamada raíz y un peso de valor realpara cada bordeDevuelve una arborescencia que se extiendeenraizado ende peso mínimo, donde el peso de una arborescencia se define como la suma de los pesos de sus bordes,.
El algoritmo tiene una descripción recursiva.denota la función que devuelve una arborescencia de expansión enraizada ende peso mínimo. Primero eliminamos cualquier borde decuyo destino esTambié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 nodoaparte de la raíz, encuentra la arista entrante ade menor peso (los empates se resuelven arbitrariamente). Denotemos el origen de esta arista por. Si el conjunto de aristasno contiene ningún ciclo, entonces.
De lo contrario,contiene al menos un ciclo. Elija arbitrariamente uno de estos ciclos y llámeloAhora definimos un nuevo grafo dirigido ponderado.en el que el ciclose "contrae" en un nodo de la siguiente manera:
Los nodos deson los nodos deno enmás un nuevo nodo denominado.
- Sies una ventaja encon y(un borde que entra en el ciclo), luego incluir enun nuevo bordey definir.
- Sies una ventaja encony(un borde que se aleja del ciclo), luego incluir enun nuevo bordey definir.
- Sies una ventaja encony(un borde no relacionado con el ciclo), luego incluir enun nuevo bordey definir.
Para cada arista en, recordamos qué borde encorresponde a.
Ahora encuentra una arborescencia de mínima extensión.deutilizando una llamada a. Desdees una arborescencia de expansión, cada vértice tiene exactamente una arista entrante.ser la ventaja entrante única paraenEste borde corresponde a un bordecon. Quitar el bordede, rompiendo el ciclo. Marque cada borde restante en. Para cada arista en, marca su borde correspondiente enAhora definimos.ser el conjunto de aristas marcadas, que forman una arborescencia de extensión mínima.
Observa quese define en términos de, contener estrictamente menos vértices que. Encontrarpara un grafo de un solo vértice es trivial (es simplementepor sí mismo), por lo que se garantiza que el algoritmo recursivo terminará.
Tiempo de ejecución
El tiempo de ejecución de este algoritmo es. Una implementación más rápida del algoritmo debido a Robert Tarjan se ejecuta en tiempopara grafos dispersos ypara 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ón.
Referencias
- ↑ 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 todos-componente que abarca bosques, surge un multiplicador en la complejidad del algoritmo , 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 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ínimos-componente que abarca bosques para todoshasta 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
Enlaces externos
- 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.
- Algoritmos de grafos