Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmo de Dijkstra 9072
Algoritmo de Dijkstra 9072
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