algoritmo de dijkstra

Post on 18-Jun-2015

63.546 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Analisis del Algoritmo de Dijkstra

TRANSCRIPT

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:

1. V es un conjunto de vértices

2. 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

53

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

56

4

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

5

3

86

1

2

43

5

11

11

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

53

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

53

1

13

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

53

1

13

El algoritmo

Aumentar S agregando el elemento v en V-S tal que Dv sea el mínimo de ese conjunto.

Actualizar los valores de Di para todos los elementos i existentes en V-S.

Di=mínimo( Di, Dv+f(v, i) ) Terminar cuando |S|=|V|

Paso a paso (Iteración 1)

Buscar mínimo Di 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

53

1

13

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

53

1

13

Paso a paso (Iteración 2)

Buscar mínimo Di 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

53

1

13

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

53

1

13

Paso a paso (Iteración 3)

Buscar mínimo Di 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

53

1

13

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

53

1

13

Paso a paso (Iteración 4)

Buscar mínimo Di 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

53

1

13

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

53

1

13

Final

|S| = |V| La mejor manera de llegar al vértice u se

encuentra en Du

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

53

1

13

¿Por qué funciona?

Supongamos delta(s,v) = Mejor manera de llegar de s a v

Si Dijkstra funciona: Du=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 Du≠delta(s,u)

Propiedades que tendría u

u no puede ser s porque Ds = 0 Existe un camino de s a u, de lo contrario

Ds = ∞ 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 Dx=delta(s,x) Posteriormente se actualizó el vértice y, así

que Dy=delta(s,y), pero aun no es insertado en S

Entonces

Puesto que y se encuentra antes que u:

Dy=delta(s,y) ≤ Du ≤ delta(s,u) Pero partimos de que u esta siendo insertado

en S, así que se debe cumplir que: Dy ≥ Du

Finalmente

Así que:

Dy=delta(s,y) = Du=delta(s,u)

El Multiple Source Shortest-Path Problem

1

2

4

3 5

2 4

1

1

53

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: f1->(p1)->f2->(p2)->v > f2->(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

13

¿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

53

1

13

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

53

1

13

Conclusiones

Complejidad O(v2) 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

top related