Algoritmo de Edmond

De testwiki
Ir a la navegación Ir a la búsqueda

En teoría de grafos, el algoritmo de Edmond es un algoritmo para encontrar una arborescencia de peso mínimo (a veces llamado de óptima derivación). Es el equivalente dirigido del árbol recubridor mínimo. El algoritmo estuvo propuesto independientemente primero por Yoeng-Jin Chu y Tseng-Hong Liu (1965) y posteriormente por Jack Edmonds (1967).

Algoritmo

Descripción

El algoritmo toma como entrada un grafo directo D=V,E donde V es el conjunto de nodos, E es el conjunto de aristas dirigidas, rV es un vértice distintivo llamado raíz, y un peso real w(e)eE. Esto devuelve una arborescencia A arraigada en r como el peso mínimo, donde el peso de arborescencia se define como la suma de sus pesos: w(A)=eAw(e).

El algoritmo tiene una descripción recursiva. Permite denotar la función f(D,r,w) que devuelve la arborescencia arraigada en r de peso mínimo. Primero retiramos cualquier arista de E cuya destinación es r. También podemos sustituir 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 nodo v que no sea la raíz, encuentre la arista entrante a v dπ(v). Si el conjunto de aristas P={(π(v),v)vV{r}} no contiene ningún ciclo, entonces f(D,r,w)=P.

Por otra parte, P contiene el último ciclo. Escoja arbitrariamente uno de estos ciclos y llámelo C. Ahora definiremos un nuevo grafo dirigido ponderadoD=V,E en el cual el ciclo C se "contrae" en un nodo de la siguiente manera:

Los nodos de V son los nodos de V no en C mas un nuevo nodo denotado vC.

  • Si (u,v) es una arista de E con uC y vC (una arista que entra en un ciclo), entonces incluiremos en E una nueva arista e=(u,vC), y define w(e)=w(u,v)w(π(v),v).
  • Si (u,v)E con uC y vC (una arista que se aleja del ciclo), luego incluya E una nueva arista e=(vC,v), y defina w(e)=w(u,v).
  • Si (u,v) es una arista de E con uC y vC (una arista no relacionada con el ciclo), luego incluya en E una nueva arista e=(u,v), y defina w(e)=w(u,v).

Por cada nodo en E, recordaremos a qué arista en E corresponde.

f(D,r,w). Puesto que A es una arborescencia que abarca, cada vértice tiene exactamente una arista entrante. Sea (u,vC) el único arista entrante en vC en A. Esta arista corresponde con una arista (u,v)E con vC. Elimina la arista (π(v),v) de C, rompiendo el ciclo. C. Por cada arista en A, marque esta correspondiente arista en E. Ahora defina f(D,r,w) como el conjunto de aristas marcadas que forman una arborescencia de extensión mínima.

Observe que f(D,r,w) f(D,r,w), con D D. Halle f(D,r,w) para un gráfico de un solo vértice es trivial (es solo D en sí mismo), por lo que el algoritmo recursivo siempre termina.

Tiempo de ejecución

El tiempo de ejecución de este algoritmo es O(EV). Una implementación más rápida del algoritmo es debida a Robert Tarjan que ejecuta O(ElogV) O(V2). Este es tan rápido como el Algoritmo de Prim pO(E+VlogV).

Referencias

Plantilla:Listaref

Enlaces externos

Plantilla:Control de autoridades