Algoritmo de Dijkstra

joemmanuel 24,838 views 36 slides Jun 04, 2007
Slide 1
Slide 1 of 36
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36

About This Presentation

Analisis del Algoritmo de Dijkstra


Slide Content

Caminos más cortos a
partir de múltiples
fuentes en un grafo
Joemmanuel Ponce Galindo

¿Qué es un grafo?

Un grafo es…
Una pareja ordenada G(V,E) con las
siguientes características:
3.V es un conjunto de vértices
4.E es un conjunto de parejas de distintos
vértices, entre los cuales se trazan líneas
(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 mínima
(Single Source)
¿Cómo llego del punto 1 a 4 de la manera más corta posible?
1
2
4
3 5
2
4
1
1
5
3
1
1
3

¿Cómo se resuelve?
Existen algoritmos genéricos para ello:
Dijkstra Algorithm
Floyd Algorithm
Bellman-Ford Algorithm

Algoritmo de Dijkstra
Algoritmo glotón (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 mínimo de ese conjunto.
Actualizar los valores de D
i
para todos los
elementos i existentes en V-S.
D
i
=mínimo( D
i
, D
v
+f(v, i) )
Terminar cuando |S|=|V|

Paso a paso (Iteración 1)
Buscar mínimo 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 (Iteración 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 (Iteración 2)
Buscar mínimo 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 (Iteración 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 (Iteración 3)
Buscar mínimo 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 (Iteración 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 (Iteración 4)
Buscar mínimo 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 (Iteración 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 vértice 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

Demostración por
contradicción
Suponga que u es el primer vértice añadido a
S tal que D
u≠delta(s,u)

Propiedades que tendría 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 más corto.

Suposición principal
Sea s->(p1)->x->y->(p2)->u el camino más
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 vértice 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

¿Cuál es el problema?
¿Cuál 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 más corto para llegar a u,
existe sólo una fuente:
f
1
->(p1)->f
2
->(p2)->v > f
2
->(p2)->v

Un problema más real
Puntos Naranjas: Centros de Distribución
Puntos Grises: Ciudades
¿De qué centro de distribución 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 Distribución
Puntos Grises: Ciudades
Quiero construir un nuevo Punto de
Distribución ¿Cuál es el mejor lugar para
hacerlo?
1
2
4
3 5
2
4
1
1
3
1
1
3

¿Cómo lo resolvemos con
Dijkstra?
Algoritmo glotón (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
) pudiéndose reducir a
O(nlogn) con Busqueda Binaria
Procesa hasta 10,000 vértices en 1 segundo
El Algoritmo de Dijkstra es rápido
Demostramos que resuelve eficazmente
nuestro problema