You are on page 1of 11

OPTIMIZA CION DE GRAFOS ***El camino ms corto***

En la Teora de grafos, el problema de los caminos ms cortos 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. Los caminos ms cortos entre dos nodos, para diferenciarlo de la siguiente generalizacin:
El problema de los caminos ms cortos desde un origen en el cual tenemos que encontrar los caminos ms cortos de un vrtice origen v a todos los dems vrtices del grafo. El problema de los caminos ms cortos con un destino en el cual tenemos que encontrar los caminos ms cortos desde todos los vrtices del grafo a un nico vrtice destino, esto puede ser reducido al problema anterior invirtiendo el orden. El problema de los caminos ms cortos entre todos los pares de vrtices, el cual tenemos que encontrar los caminos ms cortos entre cada par de vrtices (v , v') en el grafo.

Algoritmo de Dijkstra, resuelve el problema de los caminos ms cortos desde un nico vrtice origen hasta todos los otros vrtices del grafo. 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. 1. 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. 2. Sea a = x (tomamos a como nodo actual). 3. Recorremos todos los nodos adyacentes de a, excepto los nodos marcados, llamaremos a estos vi. 4. Si la distancia desde x hasta vi guardada en D es mayor que la distancia desde x hasta a, sumada a la distancia desde a hasta vi; esta se sustituye con la segunda nombrada, esto es: si (Di > Da + d(a, vi)) entonces Di = Da + d(a, vi) 5. Marcamos como completo el nodo a. 6. 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.

Ejemplo del algoritmo de Dijkstra:

Camino

longitud (peso o coste)

Algoritmo Floyd -Warshall


Obtiene la mejor ruta entre todo par de nodos. Trabaja con la matriz D inicializada con las distancias directas entre todo par de nodos. La iteracin se produce sobre nodos intermedios, es decir, para todo elemento de la matriz se prueba si lo mejor para ir de i a j es a travs de un nodo intermedio elegido o

como estaba anteriormente, y esto se prueba con todos los nodos de la red. Una vez probados todos los nodos de la red como nodos intermedios, la matriz resultante da la mejor distancia entre todo par de nodos. Es decir el algoritmo es el siguiente:

Iniciacin.

- matriz de distancias. - distancia del enlace entre el nodo i y el nodo j.

Iteracin. Para n=0,1 ... ,N-1

Empezando con el nodo 1 como intermedio (n=0), se prueba con todos los nodos como nodos intermedios, el ltimo es con el nodo N como nodo intermedio (n=N-1), y as se van hallando las distancias mnimas.

Ejemplo del algoritmo de Floyd:

D(0) 1 1 0 2 2 3 4 5

2 0 10

3 7 0 5

5 1 8 6 0

4 0

D(1) 1 1 0 2 2 3 4 5

2 0 10

3 7 0 5

5 1 3 6 0

4 0

D(2) 1 2 3 4 5 D(4) 1 2 3 4 5

1 0 2

2 0

7 0 4 12 10 17 0 5 1 0 2 16 12 21 2 3 4

5 1 3 6 0

D(3) 1 2 3 4 5 D(5) 1 2 3 4 5

1 0 2

5 1 0 7 11 3 0 4 12 10 17 0 6 5 9 0 1 0 2 16 12 21 2 20 0 14 10 19 3 6 7 0 17 5 4 10 11 4 0 9 5 1 3 10 6 0

5 1 0 7 11 3 14 0 4 10 10 17 0 6 19 5 9 0

***flujos en grafos*** Entendiendo una red de flujo como un grafo dirigido, donde la fuente es quien produce o inicia el traspaso de algn material o producto por los arcos, estos ltimos, vistos como caminos o conductos y tomando en cuenta la ley de corrientes de Kirchoff, donde, la suma de flujos entrantes a un vrtice debe ser igual a la suma de flujos saliendo del vrtice. Flujos mximo Uno de los problemas ms comunes de flujo en redes es el de Flujo Mximo. Esto es, dada un red de flujos, encontrar un flujo de un nodo v a uno u tal que ningn otro flujo tenga mayor valor. El flujo que sale de v debe ser igual al flujo que entra a u. Algoritmo de Ford-fullkerson Este mtodo depende de tres ideas importantes: Camino de aumento y red residual. Este mtodo es iterativo. Se comienza con f(u,v) =0 para cada par de nodos. En cada iteracin se incrementa el valor del flujo buscando un camino de aumento, el cual es un camino desde la fuente al resumidero que puede conducir ms flujo. Ford-Kulkerson_metodo (G, s, t) Inicializar flujo f a 0;

While (existe un camino de aumento p) do Aumentar el flujo f a lo largo de p; Return f; Se repite el proceso previo hasta no encontrar un camino de aumento. Capacidad residual: es la capacidad adicional de flujo que un arco puede llevar: cf (u, v) = c (u, v) - f(u,v) Dado una red de flujo G= (v, E) y un flujo f, la red residual: inducida por f es Gf = (V, Ef), con Ef = {(u,v) VxV: cf (u,v)>0

Ejemplo del algoritmo de Ford-Fullkerson:

Grafos Bipartitos Un grafo G = (V,E) se dice que es bipartito si el conjunto de vrtices V puede particionarse en dos subconjuntos V1 y V2 tales que todas las aristas tengan un extremo en V1 y el otro en V2. En la figura se representa un grafo bipartito con V1 = {s, t, u, v} y V2 = {x, y, z}.

Grafos Bipartitos Completos

Si G = (V,E) es un grafo bipartito con V = V1 V2, V1 V2 = , |V1| = m, |V21 = n y E = V1 V2 (es decir, si (u, v) es una arista para todo par de vrtices u 2 V1, v 2 V2) entonces

se dice que G es un grafo bipartito completo y se denota Km,n. La siguiente figura se representa K3, 3.

***Emparejamiento de grafos***

Un emparejamiento de un grafo simple G, es cualquier subgrafo 1-regular de G, es decir un subgrafo inducido por las aristas dos a dos no incidentes entre s. A = {a, b, c, d, e, f, g, h, i, j, k, l} M = {(c, i), (e, g), (f, h), (d, j)}

Emparejamiento mximal Un emparejamiento es mximal en un grafo si no se puede ampliar agregando aristas (toda arista de G comparte extremos con alguna arista de M).

Emparejamiento mximo Un emparejamiento es mximo si tiene el mayor nmero posible de aristas.

Emparejamiento en Grafos Bipartitos En un grafo bipartito tenemos un emparejamiento completo y decimos que M es completo para si |M| = | |.

***rboles ponderados y arboles de expansin mnimos.*** Un grafo ponderado o grafo con pesos es un grafo G (V, E), en el que a cada arista se le asigna un valor real no negativo o peso. Sobre el conjunto de aristas se introduce una funcin peso. El peso de un subgrafo de un grafo ponderado es la suma de los pesos de todas sus aristas.

El peso total del grafo es: W(G)=w(a,b)+w(a,c)+w(a,d)+w(a,e)+w(a,f)+w(b,c)+w(b,e)+w(b,f)+w(b,g)+w(c,e)+w(c,f)+w( d,g)+w(e,f)+w(f,g)=8+2+12+4+6+6+9+3+9+3+5+3+4+5=79. El peso del subgrafo H formado por los vrtices a, b, c, d seria W (H)=8+2+12+6=28.

Un rbol de expansin mnimo de un grafo conexo G con pesos es un rbol generador de G que tiene el menor peso. En general no es nico. Todo grafo conexo con pesos tiene un rbol generador mnimo.

Algoritmo de Prim. Se parte de un vrtice y se van alcanzando los dems, de uno en uno, del modo ms econmico posible, con respecto al peso de las aristas. 1. Seleccionar un vrtice arbitrario u. 2. Hacer S={u} y T={}. 3. Para cada vrtice z de V-S asignar t(z)=w(u, z) si existe la arista (u, z). Si esta arista no existe asignar .t(z) = 4. Elegir el vrtice v de V-S tal que t(v) sea el menor de los nmeros t(z) para todo z de V-S.

5. Insertar v en S 6. Insertar la arista (u, v) en T 7. Mientras V: S a) Para cada z de V-S se actualiza t(z)=min{t(z),w(v, z)}. b) Elegir el vrtice v de V-S tal que t(v) sea el menor de los nmeros t(z) para todo z de VS. c) Insertar v en S d) Insertar en T la arista (u,v) tal que u est en S y t(v)=w(u,v).
Ejemplo del algoritmo de prim:

Algoritmo de Kruskal: Se eligen aristas de la forma ms econmica. Inicialmente se ordenan las aristas por su peso. A continuacin se van eligiendo las aristas de menor peso de modo tal, que no formen ciclo con las aristas anteriormente seleccionadas. Para evitar que se

formen ciclos se asignan etiquetas a los vrtices de modo que los vrtices que formen parte de las aristas ya elegidas tengan todas las mismas etiquetas.

1. T={} 2. Asignar etiquetas a todos los vrtices t(i)=i, i=1, 2, ..., n. 3. Mientras halla vrtices con etiquetas diferentes repetir. a) Escoger la arista (u, v) de menor peso tal que t(u) sea diferente de t(v). Agregarla a T b) Asignar a todos los vrtices de una componente conexa de T la misma etiqueta.

ejemplo del algoritmo de Kruskal:

You might also like