Sunteți pe pagina 1din 27

Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Caminos mínimos
Algoritmos y Estructura de Datos III

Facultad de Ciencias Exactas y Naturales,


Universidad de Buenos Aires

13 de Mayo de 2013

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Camino mínimo

I Se pueden modelar muchas situaciones


I Diferentes problemas:
I Camino mínimo entre dos vértices
I Camino mínimo entre un vértice y el resto de vértices
I Camino mínimo entre entre todos los pares de vértices

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Camino mínimo

I Cada algoritmo se puede medir de muchas maneras


distintas:
I Complejidad temporal
I Complejidad espacial
I Implementación sencilla o compleja
I Calcula información parcial útil? (i.e. Qué pasa si modifico
el grafo luego de haber resuelto el problema?)
I etc

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Camino mínimo

I Algunos de los algoritmos que vemos en la materia:


I Dijkstra (uno contra todos)
I Bellman-Ford (uno contra todos)
I Floyd-Warshall (todos contra todos)
I Dantzig (todos contra todos)

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Bellman-Ford

Camino mínimo desde un vértice al resto


I Resuelve el problema, aunque haya aristas con peso
negativo.
I Si hay un ciclo de peso negativo, lo detecta, y lo reporta.
I Si no hay ciclos negativos, devuelve la respuesta.

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Bellman-Ford

El algoritmo se puede resumir en los siguientes pasos:


I Inicializar variables
I Relajar aristas
I Detectar ciclos negativos

Relajación
El término relajar la arista (u, v ):
Chequear si mejoramos camino mínimo al vértice v
atravesando la arista (u, v ).
Si es posible, actualizar el camino mínimo hasta v .

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Pseudocodigo

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Claves del algoritmo

I Inicialización: Trivial.
I Relajación: En el paso i nos aseguramos de tener el
camino mínimo a v , usando a lo sumo i aristas.
I Detección de ciclos negativos: Si puedo seguir mejorando,
use más de n − 1 aristas, tuve que repetir vértices.
Entonces, tengo ciclo negativo.

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problemas

I Quiero calcular camino mínimo desde s al resto de


vértices
I Sé que ningún camino mínimo de s a otro vértice usa mas
de c aristas.
I Me sirve de algo esa información?

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problemas

I Podemos modificar el primer ciclo...


I Para que pare cuando no haga más modificaciones
durante la relajación
I Ahora sé que voy a encontrar ese camino en O(c · m)
utilizando algoritmo de Bellman-Ford

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problemas

I Las monedas de los distintos paises tienen distintas


conversiones entre si. Por ejemplo, 1 US sirve para
comprar 4.4 ARG. 1 ARG sirve para comprar 0.5 BR. 1 BR
compra 0.49 US. Entonces, empezando con 1 US,
compramos 4.4 x 0.5 x 0.49 y terminamos con 1.078 US.
I Sea R[i][j], una tabla que me dice, cuanto vale convertir
una unidad de mi en mj .
I Quiero ver si hay alguna manera de generar mas dinero
que el inicial.

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problemas

I Busco una secuencia tal que


R[i1 ][i2 ] · R[i2 ][i3 ] . . . R[ik −1 ][ik ] · R[ik ][i1 ] > 1
I Puedo representar el problema con un grafo.
I V las monedas disponibles, y E las aristas donde
w(i, j) = R[i][j].

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Ejemplo

BR
0.5

2
ARG 0.49
2.04
0.22

4.4
US

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problemas

I Que tengo que buscar en el grafo?


I R[i1 ][i2 ] · R[i2 ][i3 ] . . . R[ik −1 ][ik ] · R[ik ][i1 ] > 1
I ⇐⇒
log R[i1 ][i2 ] + log R[i2 ][i3 ] . . . log R[ik −1 ][ik ] + log R[ik ][i1 ] > 0
I Esto es un ciclo positivo.
1 1 1 1
I ⇐⇒ R[i1 ][i2 ] · R[i2 ][i3 ] . . . R[ik −1 ][ik ] · R[ik ][i1 ] <1
I log R[i11][i2 ] + log R[i21][i3 ] . . . log R[ik −1
1 1
][ik ] + log R[ik ][i1 ] < 0
1
I w(i, j) = log R[i][j] = − log R[i][j]
I Entonces quiero encontrar un ciclo negativo

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problemas

I Ford me sirve para eso pero...


I Desde qué vertice empiezo?
I Vértice ficticio que llegue a todos

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Conclusiones Bellman-FORD

I Obtiene camino mínimo de un vertice al resto del grafo.


I Detecta ciclos negativos.
I Relaja todas las aristas en cada paso.
I Complejidad temporal: O(|V | · |E|)
I Complejidad espacial: O(|V |)

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Floyd-Warshall
Camino mínimo entre todos los vértices
I Formulación de programación dinámica para resolver el
problema.
I Fácil de implementar.

Clave de la formulación
La menor manera de ir de vi a vj es, o bien usando la arista
(vi , vj ) o bien la mejor manera de ir de vi a vk y de vk a vj : Al
finalizar la iteración k − 1, el algoritmo de Floyd genera una
matriz de caminos mínimos restringiendo a usar los vértices
{v1 , v2 , . . . , vk } como vértices intermedios.

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Viendo graficamente la idea

p1: vertices intermedios en {1,2, ..., k-1} p2: vertices intermedios en {1,2, ..., k-1}

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Formulación
(k )
Sea dij el peso del camino mínimo de i a j usando como
vertices intermedios {1, 2, . . . , k }

Figure : wij : peso de arista de i a j

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Algorithm 1: Floyd-Warshall
Data: G = (V , E)
Result: d
d[i][j][0] := wij ;
for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
if d[i][j][k − 1] > d[i][k ][k − 1] + d[k ][j][k − 1] then
d[i][j][k ] := d[i][k ][k − 1] + d[k ][j][k − 1] ;
next[i][j] := k ;

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

I Complejidad temporal?
I Complejidad espacial? Se puede mejorar?
I Qué pasa si el grafo tiene aristas de peso negativo?
I Sirve para detectar ciclos? Y si hay ciclos negativos?

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problemas Floyd

Para pensar...
I Qué pasa si mi algoritmo se detuvo cuando k = 7? Qué
puedo deducir?
I Cómo reconstruyo los caminos mínimos?

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Dantzig

Camino mínimo entre todos los pares de vértices


I Calculamos una matriz Lk +1 , usando la matriz Lk .
I Sirve para detectar ciclos negativos

Clave
Al finalizar la iteración k − 1, el algoritmo de Dantzig genera
una matriz de k × k de caminos mínimos en el subgrafo
inducido por los vértices {v1 , v2 , . . . , vk }

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Dantzig

I Llegar de vi hasta vk +1 es el mínimo de llegar de vi hasta


vj y luego de vj a vk +1 .
I Lki,k+1 k k
+1 = min1≤j≤k (Li,j + Lj,k +1 )
I Llegar de vk +1 hasta vi es el mínimo de llegar de vk +1
hasta vj y luego de vj a vi .
I Lkk +1 k k
+1,i = min1≤j≤k (Lk +1,j + Lj,i )
I Llegar de vi hasta vj es el mínimo de llegar de vi hasta
vk +1 y luego de vk +1 a vj y llegar de vi a vj sin usar vk +1 .
I Lki,j+1 = min(Lki,j , Lki,k +1 + Lkk +1,j )

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Algorithm 2: Dantzig
L[i][j] := wij ;
for k ← 1 to n − 1 do
for i ← 1 to k do
L[i][k + 1] := min1≤j≤k (L[i][j] + L[j][k + 1]) ;
L[k + 1][i] := min1≤j≤k (L[k + 1][j] + L[j][i]) ;
t := min1≤i≤k (L[k + 1][i] + L[i][k + 1]) ;
if t < 0 then
’Encontré ciclo de longitud negativa’ ;
for i ← 1 to k do
for j ← 1 to k do
L[i][j] := min(L[i][j], L[i][k + 1] + L[k + 1][j]) ;

return L ;

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Problema

Problema
Dado un grafo, calcular los caminos mínimos entre todos los
pares de vértices usando Floyd.
Le agregamos un vértice al grafo, y queremos saber toda las
distancias mínimas. Cómo hacemos?

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos
Introducción Bellman-Ford Algorithm Floyd-Warshall Algorithm Dantzig

Dudas

¿ Preguntas ?

Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires


Caminos mínimos

S-ar putea să vă placă și