Está en la página 1de 36

Caminos ms cortos a

partir de mltiples
fuentes en un grafo
Joemmanuel Ponce Galindo
Qu es un grafo?
Un grafo es
Una pareja ordenada G(V,E) con las
siguientes caractersticas:

1. V es un conjunto de vrtices
2. E es un conjunto de parejas de distintos
vrtices, entre los cuales se trazan lneas
(aristas)
Grafos ponderados
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Entonces
l(a) = peso de la arista a
l(x,y) = peso de la arista de x a y
Y qu podemos modelar?
1
0
3
5
6
4
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
5
3
8
6
1
2
4
3
5
1
1
1
1
1
2
4
2
3
3
2
1
3
Problema de la ruta mnima
(Single Source)
Cmo llego del punto 1 a 4 de la manera ms corta posible?
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Cmo se resuelve?
Existen algoritmos genricos para ello:
Dijkstra Algorithm
Floyd Algorithm
Bellman-Ford Algorithm
Algoritmo de Dijkstra
Algoritmo glotn (greedy)
Punto de inicio s
Conjunto S
Vector D


1
2
4
3 5
2
4
1
1
5
3
1
1
3
Condiciones iniciales
S={1}
V-S={2,3,4,5}
D=[0,2,1,,3]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
El algoritmo
Aumentar S agregando el elemento v en V-S
tal que D
v
sea el mnimo de ese conjunto.
Actualizar los valores de D
i
para todos los
elementos i existentes en V-S.

D
i
=mnimo( D
i
, D
v
+f(v, i) )
Terminar cuando |S|=|V|
Paso a paso (Iteracin 1)
Buscar mnimo D
i
en V-S

S={1}
V-S={2,3,4,5}
D=[0,2,1,,3]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Paso a paso (Iteracin 1)
Agregar elemento a S. Actualizar D

S={1,3}
V-S={2,4,5}
D=[0,2,1,,3]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Paso a paso (Iteracin 2)
Buscar mnimo D
i
en V-S

S={1,3}
V-S={2,4,5}
D=[0,2,1,,2]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Paso a paso (Iteracin 2)
Agregar elemento a S. Actualizar D

S={1,3,2}
V-S={4,5}
D=[0,2,1,,2]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Paso a paso (Iteracin 3)
Buscar mnimo D
i
en V-S

S={1,3,2}
V-S={4,5}
D=[0,2,1,6,2]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Paso a paso (Iteracin 3)
Agregar elemento a S. Actualizar D

S={1,3,2,5}
V-S={4}
D=[0,2,1,6,2]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Paso a paso (Iteracin 4)
Buscar mnimo D
i
en V-S

S={1,3,2,5}
V-S={4}
D=[0,2,1,6,2]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Paso a paso (Iteracin 4)
Agregar elemento a S. Actualizar D

S={1,3,2,5,4}
V-S={ }
D=[0,2,1,6,2]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Final
|S| = |V|
La mejor manera de llegar al vrtice u se
encuentra en D
u

S={1,3,2,5,4}
V-S={ }
D=[0,2,1,6,2]
1 2 3 4 5
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Por qu funciona?
Supongamos delta(s,v) = Mejor manera de
llegar de s a v

Si Dijkstra funciona:
D
u
=delta(s,u) para toda u en V
Demostracin por
contradiccin
Suponga que u es el primer vrtice aadido a
S tal que D
u
delta(s,u)

Propiedades que tendra u
u no puede ser s porque D
s
= 0
Existe un camino de s a u, de lo contrario
D
s
=
Si existe un camino, entonces debe existir el
camino ms corto.

Suposicin principal
Sea s->(p1)->x->y->(p2)->u el camino ms
corto de s a u.
Propiedades de x y y
x ya fue insertado en S
D
x
=delta(s,x)
Posteriormente se actualiz el vrtice y, as
que D
y
=delta(s,y), pero aun no es insertado
en S

Entonces
Puesto que y se encuentra antes que u:
D
y
=delta(s,y) D
u
delta(s,u)
Pero partimos de que u esta siendo insertado
en S, as que se debe cumplir que:
D
y
D
u
Finalmente
As que:
D
y
=delta(s,y) = D
u
=delta(s,u)



El Multiple Source Shortest-
Path Problem
1
2
4
3 5
2
4
1
1
5
3
1
1
3
Cul es el problema?
Cul es la mejor manera de llegar al los
puntos T (town o ciudad en naranja) a partir
de cualquiera de los puntos S (fuente) ?
Consideraciones
Existe un conjunto de fuentes F
En el camino ms corto para llegar a u,
existe slo una fuente:
f
1
->(p1)->f
2
->(p2)->v > f
2
->(p2)->v

Un problema ms real
Puntos Naranjas: Centros de Distribucin
Puntos Grises: Ciudades
De qu centro de distribucin es mejor
partir a la ciudad X de tal manera de que
gaste los menos recursos posibles?
5
1
2
4
3 5
2
4
1
1
3
1
1
3
Qu otro problema podemos
resolver?
Puntos Naranjas: Centros de Distribucin
Puntos Grises: Ciudades
Quiero construir un nuevo Punto de
Distribucin Cul es el mejor lugar para
hacerlo?
1
2
4
3 5
2
4
1
1
3
1
1
3
Cmo lo resolvemos con
Dijkstra?
Algoritmo glotn (greedy)
Puntos de inicio Conjunto F
Conjunto S
Vector D


Condiciones iniciales
S=F={1,2}
V-S={3,4,5}
D=[0,0,1,4,3]
1 2 3 4 5

1
2
4
3 5
2
4
1
1
5
3
1
1
3
Estado final
S={1,5,4,3,2}
V-S={}
D=[0,0,1,4,2]
1 2 3 4 5

1
2
4
3 5
2
4
1
1
5
3
1
1
3
Conclusiones
Complejidad O(v
2
) pudindose reducir a
O(nlogn) con Busqueda Binaria
Procesa hasta 10,000 vrtices en 1 segundo

El Algoritmo de Dijkstra es rpido
Demostramos que resuelve eficazmente
nuestro problema

También podría gustarte