Vous êtes sur la page 1sur 102

Algortimos para determinar Caminos M nimos en Grafos

Algoritmos y Estructuras de Datos III

Camino m nimo en grafos


Sea G = (V , X ) un grafo y l : X R una funcin de o longitud/peso para las aristas de G . Deniciones: La longitud de un camino C entre dos nodos v y u es la suma de las longitudes de las aristas del camino: l(C ) =
eC

l(e)

Un camino m nimo C 0 entre u y v es un camino entre u y v tal que l(C 0 ) = m n{l(C )|C es un camino entre u y v }. Puede haber varios caminos m nimos.

Camino m nimo en grafos


Dado un grafo G , se pueden denir tres variantes de problemas sobre caminos m nimos: Unico origen - unico destino: Determinar un camino m nimo entre dos vrtices espec e cos, v y u. Unico origen - mltiples destinos: Determinar un camino m u nimo desde un vrtice espec e co v al resto de los vrtices e de G . Mltiples or u genes - mltiples destinos: Determinar un camino u m nimo entre todo par de vrtices de G . e Todos estos conceptos se pueden adaptar cuando se trabaja con un grafo orientado.

Camino m nimo en grafos


Aristas con peso negativo: Si el grafo G no contiene ciclos de peso negativo o contiene alguno pero no es alcanzable desde v , entonces el problema sigue estando bien denido, aunque algunos caminos puedan tener longitud negativa. Sin embargo, si G tiene algn ciclo con peso negativo alcanzable u desde v , el concepto de camino de peso m nimo deja de estar bien denido. Circuitos: Un camino m nimo no puede contener circuitos. Propiedad de subestructura ptima de un camino o m nimo: Dado un digrafo G = (V , X ) con una funcin de o peso l : X R, sea P : v1 . . . vk un camino m nimo de v1 a vk . Entonces 1 i j k, Pvi vj es un camino m nimo desde vi a vj .

Camino m nimo en grafos - Unico origen-mltiples destinos u


Problema: Dado G = (V , X ) un grafo y l : X R una funcin o que asigna a cada arco una cierta longitud y v V un nodo del grafo, calcular los caminos m nimos de v al resto de los nodos. Distintas situaciones: El grafo puede ser orientado o no. Todos los arcos tienen longitud no negativa. No hay un circuito orientado de longitud negativa. Hay circuitos orientados de longitud negativa. Queremos calcular los caminos m nimos entre todos los pares de nodos.

Algoritmo de Dijkstra (1959)


Asumimos que las longitudes de las aristas son positivas. El grafo puede ser orientado o no orientado.
S := {v }, (v ) := 0 para todo u V hacer si (v , u) X entonces (u) := l(v , u) si no (u) := n si n para mientras S = V hacer elegir w V \ S tal que (w ) = m uV \S (u) n S := S w para todo u V \ S y (w , u) X hacer si (u) > (w ) + l(w , u) entonces (u) := (w ) + l(w , u) n si n para n mientras retornar

Algoritmo de Dijkstra (1959) - Determina camino m nimo


S := {v }, (v ) := 0, pred(v ) := 0 para todo u V hacer si (v , u) X entonces (u) := l(v , u), pred(u) := v si no (w ) := , pred(w ) := n si n para mientras S = V hacer elegir w V \ S tal que (w ) = m uV \S (u) n S := S w para todo u V \ S y (w , u) X hacer si (u) > (w ) + l(w , u) entonces (u) := (w ) + l(w , u) pred(u) := w n si n para n mientras retornar , pred

Algoritmo de Dijkstra - Ejemplo

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1} = (0, ?, ?, ?, ?, ?)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1} = (0, 4, 7, , , 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6} = (0, 4, 7, , , 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6} = (0, 4, 7, , , 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6} = (0, 4, 7, , 6, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2} = (0, 4, 7, , 6, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2} = (0, 4, 7, , 6, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2} = (0, 4, 7, , 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2, 5} = (0, 4, 7, , 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2, 5} = (0, 4, 7, , 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2, 5} = (0, 4, 7, 9, 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2, 5, 3} = (0, 4, 7, 9, 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2, 5, 3} = (0, 4, 7, 9, 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2, 5, 3} = (0, 4, 7, 8, 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6, 2, 5, 3, 4} = (0, 4, 7, 8, 5, 3)

2 4 1 3 6 7

3 1

1 4

Algoritmo de Dijkstra - Ejemplo

2 4 1 3 6 7 -2

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1} = (0, ?, ?, ?, ?, ?)

2 4 1 3 6 7 -2

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1} = (0, 4, 7, , , 3)

2 4 1 3 6 7 -2

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6} = (0, 4, 7, , , 3)

2 4 1 3 6 7 -2

3 1

1 4

Algoritmo de Dijkstra - Ejemplo


S = {1, 6} = (0, 4, 7, , , 3)

2 4 1 3 6 7 -2

3 1

1 4

Ya no actualizar (6)! a

Algoritmo de Dijkstra

Lema: Dado un grafo orientado G con pesos positivo en las aristas, al nalizar la iteracin k el algoritmo de Dijkstra determina o el camino m nimo entre el nodo v y los nodos de Sk (donde Sk conjunto S al nalizar la iteracin k). o

Teorema: Dado un grafo orientado G con pesos positivo en las aristas, el algoritmo de Dijkstra determina el camino m nimo entre el nodo v y el resto de los nodos de G .

Algoritmo de Ford (1956)


Asumimos que el grafo es orientado y no tiene circuitos de longitud negativa. (v ) := 0 para todo u V \ {v } hacer (u) := n para mientras hay cambios en hacer := para todo u V \ {v } hacer (u) := m n((u), m (w ,u)X (w ) + l(w , u)) n n para n mientras retornar

Algoritmo de Ford - Ejemplo

2 4 1 3 6 7 -2

3 1

1 4

Algoritmo de Ford - Ejemplo


= (0, , , , , )

2 4 1 3 6 7 -2

3 1

1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, , , , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, , , , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, 4, , , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, 4, , , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, 4, 7, , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, 4, 7, , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, 4, 7, , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, 4, 7, , , ) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 1 o = (0, 4, 7, , , 3) = (0, , , , , ) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, , , 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, , , 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, , , 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, , , 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, 8, , 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, 8, , 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, 8, 5, 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, 8, 5, 3) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford - Ejemplo


Iteracin 2 o = (0, 4, 7, 8, 5, 2) = (0, 4, 7, , , 3) 2 4 1 3 6 3 5 7 -2 1 1 4 3 3 1 4

Algoritmo de Ford (1956)


Teorema: Dado un grafo orientado G sin circuitos de longitud negativa, el algoritmo de Ford determina el camino m nimo entre el nodo v y todos los dems. a

Algoritmo de Ford (1956)


Teorema: Dado un grafo orientado G sin circuitos de longitud negativa, el algoritmo de Ford determina el camino m nimo entre el nodo v y todos los dems. a

Cul es la complejidad del algoritmo de Ford? a

Algoritmo de Ford (1956)


Teorema: Dado un grafo orientado G sin circuitos de longitud negativa, el algoritmo de Ford determina el camino m nimo entre el nodo v y todos los dems. a

Cul es la complejidad del algoritmo de Ford? a Qu pasa si aplicamos Ford a un grafo no orientado? e

Algoritmo de Ford (1956)


Teorema: Dado un grafo orientado G sin circuitos de longitud negativa, el algoritmo de Ford determina el camino m nimo entre el nodo v y todos los dems. a

Cul es la complejidad del algoritmo de Ford? a Qu pasa si aplicamos Ford a un grafo no orientado? e Mejora del clculo de a

Algoritmo de Ford (1956)


Teorema: Dado un grafo orientado G sin circuitos de longitud negativa, el algoritmo de Ford determina el camino m nimo entre el nodo v y todos los dems. a

Cul es la complejidad del algoritmo de Ford? a Qu pasa si aplicamos Ford a un grafo no orientado? e Mejora del clculo de a Cmo podemos modicar el algoritmo de Ford para detectar o si hay circuitos de longitud negativa?

Algoritmo de Ford (1956)


Asumimos que el grafo es orientado. Detecta si hay circuitos de longitud negativa. (v ) := 0, i := 0 para todo u V \ {v } hacer (u) := n para mientras hay cambios en y i < n hacer i := i + 1 para todo uV \ {v } hacer (u) := m n((u), m (w ,u)X (w ) + l(w , u)) n n para n mientras si i = n entonces retornar "Hay circuitos de longitud negativa." si no retornar n si

Algoritmos matriciales
Sea G = ({1, . . . , n}, X ) un digrafo y l : X R una funcin de o longitud/peso para las aristas de G . Denimos las siguientes matrices: L R nn , donde los elementos 0 lij = l(i j) lij de L se denen como: si i = j si i j X si i j X /

D R nn , donde los elementos dij de D se denene como:


longitud del camino m nimo orientado de i a j si existe alguno si no

dij =

D es llamada matriz de distancias de G .

Algoritmos matriciales

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962)


Llamamos v1 , . . . , vn a los nodos de G . El algoritmo de Floyd se basa en lo siguiente: 1. Si L0 = L y calculamos L1 como
1 0 lij = m ij , li1 + l1j ) n(l 0 0 1 lij es la longitud de un camino m nimo de i a j con nodo intermedio v1 o directo.

2. Si calculamos Lk a partir de Lk1 como


k1 k lij = m ij , lik + lkj ) n(l k1 k1 k lij es la longitud de un camino m nimo de i a j cuyos nodos intermedios estn en {v1 , . . . , vk }. a

3. D = Ln

Algoritmo de Floyd (1962)

Asumimos que el grafo es orientado y que no hay circuitos de longitud negativa. L0 := L para k desde 1 a n hacer para i desde 1 a n hacer para j desde 1 a n hacer k1 k n(l k1 k1 lij := m ij , lik + lkj ) n para n para n para retornar Ln

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 2 L0 = 2 2 3 -2 4 2 3 0 4 3 2 0 4 4 3 2 1 0

4 1

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L1 = 1 2 3 4 2 3 4 2 L0 = 2 2 3 -2 4 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L1 = 1 0 2 2 3 -2 4 2 3 0 3 2 4 3 2 2 L0 = 2 2 3 -2 4 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=1 i =3 j =2 4 L1 = 1 0 2 2 3 -2 4 2 3 0 3 2 4 3 2 2 L0 = 2 2 3 -2 4 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=1 i =3 j =2 4 L1 = 1 0 2 2 3 -2 4 2 3 0 1 3 2 4 3 2 2 L0 = 2 2 3 -2 4 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L1 = 1 0 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0 2 L0 = 2 2 3 -2 4 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

4 1

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L2 = 1 0 2 3 4 2 3 3 4 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=2 i =1 j =3 4 L2 = 1 0 2 3 4 2 3 3 4 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=2 i =1 j =3 4 L2 = 1 0 2 3 4 2 3 3 5 4 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L2 = 1 0 2 2 3 -2 4 2 3 0 1 3 5 2 0 4 3 2 1 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=2 i =4 j =1 4 L2 = 1 0 2 2 3 -2 4 2 3 0 1 3 5 2 0 4 3 2 1 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=2 i =4 j =1 4 L2 = 1 0 2 2 3 -2 4 6 2 3 0 1 3 5 2 0 4 3 2 1 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L2 = 1 0 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0 2 L1 = 2 2 3 -2 4 2 3 0 1 4 3 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

4 1

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L3 = 1 0 2 3 4 2 3 3 5 4 3 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=3 i =2 j =1 4 L3 = 1 0 2 3 4 2 3 3 5 4 3 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=3 i =2 j =1 4 L3 = 1 0 2 0 3 4 2 3 3 5 4 3 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L3 = 1 0 2 0 3 -2 4 2 3 0 1 3 5 2 0 4 3 2 1 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=3 i =4 j =1 4 L3 = 1 0 2 0 3 -2 4 2 3 0 1 3 5 2 0 4 3 2 1 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 k=3 i =4 j =1 4 L3 = 1 0 2 0 3 -2 4 2 2 3 0 1 3 5 2 0 4 3 2 1 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 L3 = 1 0 2 0 3 -2 4 2 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0 2 L2 = 2 2 3 -2 4 6 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 2 L3 = 2 0 3 -2 4 2 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

4 1

Algoritmo de Floyd (1962) - Ejemplo


1 1 0 3 1 3 -2 2 2 2 4 1 3 4 1 4 D = L4 = 1 0 2 0 3 -2 4 2 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0 2 L3 = 2 0 3 -2 4 2 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Floyd (1962)


Lema: Al nalizar la iteracin k del algoritmo de Floyd, lij es la o longitud de los caminos m nimos desde vi a vj cuyos nodos intermedios son elementos de {v1 , . . . , vk }. Teorema: El algoritmo de Floyd determina los caminos m nimos entre todos los pares de nodos de un grafo orientado sin circuitos negativos. Cul es la complejidad de algoritmo de Floyd? a Cunta memoria requiere? a Cmo podemos hacer si adems de las longitudes queremos o a determinar los caminos m nimos? Cmo se puede adaptar para detectar si el grafo tiene o circuitos de longitud negativa?

Algoritmo de Floyd (1962)


L0 := L para k desde 1 a n hacer para i desde 1 a n hacer k1 si lik = entonces k1 k1 si lik + lki < 0 entonces retornar "Hay circuitos negativos." n si para j desde 1 a n hacer k1 k n(l k1 k1 lij := m ij , lik + lkj ) n para n si n para n para retornar L

Algoritmo de Dantzig (1966)


Al nalizar la iteracin k 1, el algoritmo de Dantzig genera una o matriz de k k de caminos m nimos en el subgrafo inducido por los vrtices {v1 , . . . , vk }. e Calcula la matriz Lk+1 a partir de la matriz Lk para 1 i, j k como: Lk+1 = m 1jk (Lk + Lk n i,j j,k+1 ) i,k+1
k Lk+1 = m 1jk (Lk n k+1,j + Lj,i ) k+1,i

Lk+1 = m k , Lk n(Li,j i,k+1 + Lk k+1,j ) i,j Asumimos que el grafo es orientado. Detecta si hay circuitos de longitud negativa.

Algoritmo de Dantzig (1966)


para k desde 1 a n 1 hacer para i desde 1 a k hacer Li,k+1 := m 1jk (Li,j + Lj,k+1 ) n Lk+1,i := m 1jk (Lk+1,j + Lj,i ) n n para t := m 1ik (Lk+1,i + Li,k+1 ) n si t < 0 entonces retornar "Hay circuitos de longitud negativa" n si para i desde 1 a k hacer para j desde 1 a k hacer Li,j := m i,j , Li,k+1 + Lk+1,j ) n(L n para n para n para retornar L

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4

k=1 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4

k=1 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4

k=1 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4

k=2 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4

k=2 2 3 0 4 3 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4

k=2 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 2 3 -2 3 4 1 4 4

k=2 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 0 3 -2 3 4 1 4 4

k=3 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 0 3 -2 3 4 1 4 4

k=3 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 0 3 -2 3 4 1 4 4 2

k=3 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 0 3 -2 3 4 1 4 4 2

k=3 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966) - Ejemplo

3 1 3 -2 2 2 2 4 L= 2 1 1 0 2 0 3 -2 3 4 1 4 4 2

k=4 2 3 0 1 4 3 5 2 0 4 4 3 2 1 0

Algoritmo de Dantzig (1966)


Lema Al nalizar la iteracin k 1 del algoritmo de Dantzig, la o matriz de k k generada contiene la lobgitud de los caminos m nimos en el subgrafo inducido por los vrtices {v1 , . . . , vk }. e Teorema: El algoritmo de Dantzig determina los caminos m nimos entre todos los pares de nodos de un grafo orientado sin circuitos. Cul es la complejidad del algoritmo de Dantzig? a Qu diferencia tiene con el algoritmo de Floyd? e Qu ventajas o desventajas tiene? e

Vous aimerez peut-être aussi