Está en la página 1de 16

rbol de expansin mnima

Enteoradegrafos,unrboldeexpansin,rbolgeneradororbolrecubridorTdeungrafoconexo,no
dirigidoGesunrbolcompuestoportodoslosvrticesyalgunas(quiztodas)delasaristasdeG.
Informalmente,unrboldeexpansindeGesunaseleccindearistasdeGqueformanunrbolque
cubretodoslosvrtices.Estoes,cadavrticeestenelrbol,peronohayciclos.Porotrolado,todos
lospuentesdeGdebenestarcontenidosenT.
UnrboldeexpansinorbolrecubridordeungrafoconexoGpuedesertambindefinidocomoel
mayorconjuntodearistasdeGquenocontieneciclos,ocomoelmnimoconjuntodearistasque
conectatodoslosvrtices.

Construccin
Unrboldeexpansindeungrafosepuedeencontrar,yaseaporbsquedaenprofundidadola
bsquedaenamplitud.Ambosdeestosalgoritmosexploranelgrficodado,partiendodeunvrtice
arbitrario,haciendounbucleatravsdelosvecinosdelosvrticesquedescubrenyaadiendocada
vecinosinexploraraunaestructuradedatosparaserexploradomsadelante.Sielgrafoexaminadoes
ponderadopodemosutilizarelalgoritmodeKruskal.

Algoritmo de Kruskal
ElalgoritmodeKruskalesunalgoritmodelateoradegrafosparaencontrarunrbolrecubridor
mnimoenungrafoconexoyponderado.Esdecir,buscaunsubconjuntodearistasque,formandoun
rbol,incluyentodoslosvrticesydondeelvalortotaldetodaslasaristasdelrboleselmnimo.Siel
grafonoesconexo,entoncesbuscaunbosqueexpandidomnimo
Funcionadelasiguientemanera:
1. secreaunbosqueB(unconjuntoderboles),dondecadavrticedelgrafoesunrbolseparado
2. secreaunconjuntoCquecontengaatodaslasaristasdelgrafo
3. mientrasCesnovaco
1. eliminarunaaristadepesomnimodeC
2. siesaaristaconectadosrbolesdiferentesseaadealbosque,combinandolosdosrboles
enunsolorbol
3. encasocontrario,sedesechalaarista

Pseudocdigo Kruskal(G)
Para cada v en V[G] hacer
Nuevo conjunto C(v) {v}.
Nuevo heap Q que contiene todas las aristas de G, ordenando por su peso.
Defino un rbol T
// n es el nmero total de vrtices
Mientras T tenga menos de n-1 vertices hacer
(u,v) Q.sacarMin()
// previene ciclos en T. agrega (u,v) si u y v estn diferentes
componentes en el conjunto.
// Ntese que C(u) devuelve la componente a la que pertenece u.
if C(v) C(u) then
Agregar arista (v,u) a T.
Merge C(v) y C(u) en el conjunto
Return arbol T

Ejemplo

Este es el grafo original. Los nmeros de las aristas indican su peso.


Ninguna de las aristas est resaltada.

AD y CE son las aristas ms cortas, con peso 5, y AD se ha elegido


arbitrariamente, por tanto se resalta.

Sin embargo, ahora es CE la arista ms pequea que no forma


ciclos, con peso 5, por lo que se resalta como segunda arista.

La siguiente arista, DF con peso 6, ha sido resaltada utilizando el


mismo mtodo.

Las siguientes aristas ms pequeas son AB y BE, ambas con peso


7. AB se elige arbitrariamente, y se resalta. La arista BD se resalta
en rojo, porque formara un ciclo ABD si se hubiera elegido.

El proceso contina marcando las aristas, BE con peso 7. Muchas


otras aristas se marcan en rojo en este paso: BC (formara el
cicloBCE), DE (formara el ciclo DEBA), y FE (formara el
ciclo FEBAD).

Finalmente, el proceso termina con la arista EG de peso 9, y se ha


encontrado el rbol expandido mnimo con peso total de 39.

El camino ms corto
En la teora de grafos, el problema del camino ms corto es el problema que consiste en encontrar un
camino entre dos vrtices (o nodos) de tal manera que la suma de los pesos de las aristas que lo
constituyen es mnima. Un ejemplo de esto es encontrar el camino ms rpido para ir de una ciudad a
otra en un mapa. En este caso, los vrtices representaran las ciudades y las aristas las carreteras que las
unen, cuya ponderacin viene dada por el tiempo que se emplea en atravesarlas.

Algoritmos
Los algoritmos ms importantes para resolver este problema son:

Algoritmo de Dijkstra, resuelve el problema de los caminos ms cortos desde un nico vrtice
origen hasta todos los otros vrtices del grafo.

Algoritmo de Bellman - Ford, resuelve el problema de los caminos ms cortos desde un origen
si la ponderacin de las aristas es negativa.

Algoritmo de Bsqueda A*, resuelve el problema de los caminos ms cortos entre un par de
vrtices usando la heurstica para intentar agilizar la bsqueda.

Algoritmo de Floyd - Warshall, resuelve el problema de los caminos ms cortos entre todos los
vrtices.

Algoritmo de Johnson, resuelve el problema de los caminos ms cortos entre todos los vrtices
y puede ser ms rpido que el de Floyd-Warshall en grafos de baja densidad.

Algoritmo de Viterbi, resuelve el problema del camino estocstico ms corto con un peso
probabilstico adicional en cada vrtice.

Algoritmo de Dijkstra
El algoritmo de Dijkstra, tambin llamado algoritmo de caminos mnimos, es un algoritmo para la
determinacin del camino ms corto dado un vrtice origen al resto de los vrtices en un grafo con
pesos en cada arista. Su nombre se refiere a Edsger Dijkstra, quien lo describi por primera vez en
1959.
La idea subyacente en este algoritmo consiste en ir explorando todos los caminos ms cortos que parten
del vrtice origen y que llevan a todos los dems vrtices; cuando se obtiene el camino ms corto desde
el vrtice origen, al resto de vrtices que componen el grafo, el algoritmo se detiene. El algoritmo es
una especializacin de la bsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de

coste negativo (al elegir siempre el nodo con distancia menor, pueden quedar excluidos de la bsqueda
nodos que en prximas iteraciones bajaran el costo general del camino al pasar por una arista con
costo negativo).

Algoritmo
1. Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial, un vector D
de tamao N guardar al final del algoritmo las distancias desde x al resto de los nodos.
2. Inicializar todas las distancias en D con un valor infinito relativo ya que son desconocidas al
principio, exceptuando la de x que se debe colocar en 0 debido a que la distancia de x a x sera
0.
3. Sea a = x (tomamos a como nodo actual).
1. Recorremos todos los nodos adyacentes de a, excepto los nodos marcados, llamaremos a
estos nodos no marcados vi.
2. Para el nodo actual, calculamos la distancia tentativa desde dicho nodo a sus vecinos con la
siguiente frmula: dt(vi) = Da + d(a,vi). Es decir, la distancia tentativa del nodo vi es la
distancia que actualmente tiene el nodo en el vector D ms la distancia desde dicho el nodo
a (el actual) al nodo vi. Si la distancia tentativa es menor que la distancia almacenada en el
vector, actualizamos el vector con esta distancia tentativa. Es decir: Si dt(vi) < Dvi Dvi =
dt(vi)
4. Marcamos como completo el nodo a.
5. Tomamos como prximo nodo actual el de menor valor en D (puede hacerse almacenando los
valores en una cola de prioridad) y volvemos al paso 3 mientras existan nodos no marcados.
6. Una vez terminado al algoritmo, D estar completamente lleno.

Pseudocdigo DIJKSTRA (Grafo G, nodo_fuente s)


para u V[G] hacer
distancia[u] = INFINITO
padre[u] = NULL
visto[u] = false
distancia[s] = 0
adicionar (cola, (s, distancia[s]))
mientras que cola no es vaca hacer
u = extraer_mnimo(cola)
visto[u] = true
para todos v adyacencia[u] hacer
si no visto[v] y distancia[v] > distancia[u] + peso (u, v) hacer
distancia[v] = distancia[u] + peso (u, v)
padre[v] = u
adicionar(cola,(v, distancia[v]))

Ejemplo
Inicializa, selecciona el nodo de inicio predeterminado, etiquetar los nodos.

0
1

2
1

2
3

Reemplaza las etiquetas con la distancia de ir de a a cualquier nodo adyacente

2
1

6
2

Selecciona el predecesor mediante el que genere el costo ms pequeo y continua

2
2

4
3
2
2

4
4

6
4

2
1

4
3

2
3

Cuando la suma no mejora entonces se omite el reetiquetado

2
2

0
1

6
4

2
1

2
3

2
2

0
1

2
1

4
3

2
2

2
3

3
2
0
1

2
3

4
4
2

6
4

2
3

Flujo mximo
En teora de grafos, una red de flujo es un grafo dirigido donde existen dos vrtices especiales, uno
llamado fuente, al que se le asocia un flujo positivo y otro llamado sumidero que tiene un flujo
negativo y a cada arista se le asocia cierta capacidad positiva. En cada vrtice diferente a los dos
especiales se mantiene la ley de corrientes de Kirchoff, en donde la suma de flujos entrantes a un
vrtice debe ser igual a la suma de flujos que salen de l. Puede ser utilizada para modelar el trfico en
un sistema de autopistas, fluidos viajando en tuberas, corrientes elctricas en circuitos elctricos o
sistemas similares por lo que viaje algo entre nodos.

Algoritmo de flujo mximo


Tenemos el conocido problema de flujo mximo o maximal: cul es la tasa mayor a la cual el material
puede ser transportado de la fuente al sumidero sin violar ninguna restriccin de capacidad?
En otras palabras, el problema consiste en determinar la mxima capacidad de flujo que puede ingresar
a travs de la fuente y salir por el nodo de destino.

Algoritmo de Ford-Fulkerson

El procedimiento para obtener el flujo mximo de una red, consiste en seleccionar repetidas
veces cualquier trayectoria de la fuente al destino y asignar el flujo mximo posible en esa
trayectoria.

Capacidad residual: es la capacidad adicional de flujo que un arco puede llevar:

cf(u,v)= c(u,v) - f(u,v),

Dada una red de flujo mximo, plantee la red residual asociada.

Encuentre la trayectoria de la fuente al destino con capacidad de flujo estrictamente positivo (si
no existe alguno, es por que se ha encontrado el ptimo).

Examine estas trayectorias para encontrar la rama o arco con la menor capacidad de flujo
restante e incremente en ste valor, la capacidad del flujo en sentido contrario.

Determine todas las trayectorias estrictamente positivas, hasta que no se permita flujo del nodo
a un nodo destino.

Pseudocdigo Ford-Fulkerson(G,s,t) {
for (cada arco (u,v) de E) {
f[u,v]= 0;
f[v,u]= 0;
}
while (exista un camino p desde s a t en la red residual Gf) {
cf(p) = min{cf(u,v): (u,v) est sobre p};
for (cada arco (u,v) en p) {
f[u,v]= f[u,v] + cf(p);
f[v,u]= - f[u,v];
}
}
}

Ejemplo
red de inicio

Encuentra un camino p de s a t en G

Determina la capacidad de p y actualiza los flujos

Encuentra otro camino p de s a t

Determina la capacidad y actualiza

Y as iterativamente hasta no encontrar caminos en G

Finalmente determina la red ptima

El mtodo de la Ruta Crtica conocida tambin por CPM por sus siglas en ingls (Critical Path Method)
es una metodologa de la gestin de proyectos que nos permite entre otros aspectos estimar la duracin
de un Proyecto. Para este propsito es necesario conocer las actividades que contempla el proyecto, su
duracin en una unidad de tiempo y el orden en el cul deben ser realizadas (por ejemplo algunas
actividades se pueden desarrollar slo cuando una o varias actividades previas han sido completadas).
Cmo obtener la Ruta Crtica de un Proyecto

El ejemplo a continuacin muestra en detalle la aplicacin del mtodo de ruta crtica a un proyecto que
consta de 9 actividades cuyos tiempos estimados se encuentran en semanas. Adicionalmente en la
columna Predecesor se establece el orden en el cual se deben realizar las distintas actividades, por
ejemplo la actividad G se puede realizar una vez completada la actividad D y F.

En este contexto resulta de utilidad desarrollar un diagrama o representacin grfica del


proyecto donde cada nodo representa una actividad y las flechas un camino o ruta.

Se puede observar que las actividades iniciales son A y B y la actividad final es I. Por tanto
laduracin del proyecto ser aquella ruta o camino ms largo que comenzando en A (o en
B) termine en I. Luego, dado el tamao reducido de este ejemplo es posible enumerar todas

las posibilidades que satisfacen la condicin anterior:

Ruta:
Ruta:
Ruta:
Ruta:

A-C-I: 5[sem]+4[sem]+2[sem]=11[sem]
A-D-G-I: 5[sem]+3[sem]+14[sem]+2[sem]=24[sem]
A-E-F-G-I: 5[sem]+1[sem]+4[sem]+14[sem]+2[sem]=26[sem]
B-H-I: 6[sem]+12[sem]+2[sem]=20[sem]

La ruta crtica por tanto es A-E-F-G-I lo que determina que la duracin del proyecto es
de26[sem]. Adicionalmente podemos estimar cundo es lo ms pronto que se puede
comenzar cada actividad (inicio ms cercano o IC color rojo) y cundo es lo ms pronto
que se puede terminar una actividad (trmino ms cercano o TC color azul).

En forma complementaria se puede obtener el tiempo ms lejano en el cual se puede


terminar una actividad sin atrasar el proyecto (trmino ms lejano o TL verde) y cundo
es lo ms tarde que se puede comenzar una actividad sin retrasar el proyecto (inicio ms
lejano o IL naranjo). Para obtener dichos tiempos retrocedemos desde la actividad final (I)
hacia las actividades iniciales (A y B).

En este contexto se define el trmino Holgura (H) o Slack como el tiempo mximo que una
actividad se puede retrasar en su inicio sin que esto afecte el tiempo estimado para terminar
el proyecto como un todo:
Holgura = IL IC = TL TC
El siguiente diagrama muestra la ruta del proyecto con el clculo de las holguras de cada una
de las actividades. Se puede apreciar por ejemplo que la actividad B se puede retrasar un
mximo de 6[sem] (su holgura) y aun as estar en condiciones de terminar el proyecto en
26[sem]. Adicionalmente las actividades que pertenecen a la ruta crtica tienen
holgura igual a cero, lo que en este ejemplo en particular permite identificar una ruta
nica: A-E-F-G-I(notar que en general un proyecto puede tener ms de una ruta o camino
crtico).

También podría gustarte