análisis y diseño de algoritmos ordenamiento en tiempo lineal

40
1 Ruta más Corta con una sóla Fuente de Inicio (Single-Source Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Upload: dangbao

Post on 14-Feb-2017

236 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

1

Ruta más Corta con una sólaFuente de Inicio

(Single-Source Shortest Paths)

DR. JESÚS A. GONZÁLEZ BERNAL

CIENCIAS COMPUTACIONALES

INAOE

Page 2: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

2

Problema de Encontrar la Ruta más Corta2

Se requiere llegar de la ciudad A a la ciudad B

Tenemos un mapa con distancias entre cada par de intersecciones

¿Cómo encontramos la ruta más corta?Enumerar todas las rutas de A a B, calcular la distancia y elegir la más corta

Aún si quitamos ciclos, hay muchas posibilidades

Resolver el problema eficientemente

Page 3: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

3

Problema de Encontrar la Ruta más Corta3

Tenemos un grafo dirigido y con pesos G = (V, E)

Con una función de pesos w: E R que mapea arcos e pesos con valores reales

El peso de la ruta p = <v0, v1, …, vk> es la suma de los pesos de los arcos que la forman:

∑=

−=k

iii vvwpw

11 ),()(

Page 4: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

4

Problema de Encontrar la Ruta más Corta4

Definimos el peso de la ruta más corta de u a v como

Una Ruta-más-corta de un vértice v a un vértice u se define como cualquier ruta p con peso w(p) = δ(u,v)

⎩⎨⎧

∞⎯→⎯

=forma otracualquier de

v,au de ruta unahay Si }:)(min{),(

vupwvu

p

δ

Page 5: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

5

Modelado del Problema5

Podemos modelarlo con un grafoLos vértices representan intersecciones

Los arcos representan segmentos de carretera entre intersecciones

Los pesos de los arcos representan las distancias en carretera

La meta es encontrar la ruta más corta de una ciudad A a otra ciudad B

Los pesos también pueden representar otras métricasTiempo, costo, pérdidas, castigos, u otra cantidad que se acumula linealmente a lo largo de la ruta y que queremos minimizar

Page 6: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

6

Variantes del Problema6

Problema de las rutas más cortas desde una sola fuente

Dado un grafo G = (V, E), queremos encontrar la ruta más corta de un vértice fuente dado s ∈ V a cada vértice v ∈ V.

Problema de las rutas más cortas con un solo destino

Encontrar una ruta más corta a un vértice destino dado t de cada vértice v. Si invertimos la dirección de cada arco en el grafo, podemos reducir este problema al de una sola fuente.

Page 7: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

7

Variantes del Problema7

Problema de la ruta más corta para un solo parEncontrar la ruta más corta de u a v para los vértices u y v dados.

Si resolvemos el problema de una sola fuente con el vértice u como fuente también resolvemos éste.

No se conoce un algoritmo para este problema que corra asintóticamente más rápido que el mejor algoritmo de una sola fuente en el peor caso

Page 8: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

8

Variantes del Problema8

Problema de las rutas más cortas de todos los paresEncontrar una ruta más corta de u a v para cada par de vértices u y v.

Aunque este problema se puede resolver ejecutando un algoritmo de una sola fuente, una vez para cada vértice, se puede resolver más rápido

Page 9: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

9

Subestructura Óptima de una Ruta más Corta9

Los algoritmos de rutas más cortas se basan en la propiedad de que una ruta más corta entre dos vértices contiene otra ruta más corta en ella

Esta propiedad permite aplicarProgramación dinámica (Floyd-Warshall)

Algoritmos voraces (Dijkstra’s)

Page 10: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

10

Subestructura Óptima de una Ruta más Corta10

Lema 24.1 (Subrutas de rutas más cortas son rutas más cortas)

Dado un grafo pesado y dirigido G = (V, E) con una función de peso w: E R

Sea p = <v1, v2, …, vk> una ruta más corta del vértice v1 al vértice vk y

Para cualquier i y j tal que 1 ≤ i ≤ j ≤ k, sea pij = <vi, vi+1, …, vj> la subruta de p del vértice vi al vértice vj

Entonces pij es una ruta más corta de vi a vj

Page 11: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

11

Subestructura Óptima de una Ruta más Corta11

Prueba al lema 24.1Descomponemos la ruta p en:

Tenemos entonces que:

Asumimos que hay una ruta p’ij de vi a vj con peso:

Entonces la ruta de v1 a vk que pasa por p’ij:

Con peso:

Tiene un peso menor a w(p)

Contradice lo que asumimos, que p es una ruta más corta de v1 a vk.

kpjk

jpij

iip vvvv ⎯→⎯⎯→⎯⎯→⎯ 1

1

)()()()( 1 jkiji pwpwpwpw ++=

)()'( ijij pwpw <

kpjk

jijp

iip vvvv ⎯→⎯⎯→⎯⎯→⎯ '1

1

)()'()( 1 jkiji pwpwpw ++

Page 12: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

12

Representación de las Rutas más Cortas12

Utilizamos un grafo de predecesores Gπ = (Vπ, Eπ)π[v] denota al padre del vértice v

Al final el grafo de predecesores es un “árbol de rutas más cortas”

Un árbol con raíz que contiene una ruta más corta de la fuente s a cada vértice que es alcanzable desde s.

Un árbol de rutas más cortas con raíz s es un subgrafodirigido G’ = (V’, E’), donde V’ ⊆ V y E’ ⊆ E tal que:

V’ es el conjunto de vértices alcanzable desde s en G

G’ forma un árbol con raíz s y

Para cada v ∈ V’, la única ruta simple de s a v en G’ es una ruta más corta de s a v en G

Page 13: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

13

Representación de las Rutas más Cortas13

Las rutas más cortas no son necesariamente únicasTampoco los árboles de rutas más cortas

Page 14: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

14

Técnica de Relajación (Relaxation)

Estos algoritmos utilizan la técnica de relajación

Para cada vértice v ∈ V, mantenemos un atributo d[v], una frontera superior del peso de la ruta más corta desde la fuente s a v

A d[v] se le llama un estimado de ruta más corta

Page 15: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

15

Técnica de Relajación (Relaxation)15

Inicialización

Page 16: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

16

Técnica de Relajación (Relaxation)16

Relajación de un arco (u, v) consiste enProbar si podemos mejorar la ruta más corta a v encontrada a través de u y si es posible, actualizar d[v] y π[v]

El proceso puede decrementar el valor de la estimación de la ruta más corta d[v] y actualizar el predecesor π[v]

Page 17: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

17

Técnica de Relajación (Relaxation)17

Page 18: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

18

Técnica de Relajación (Relaxation)18

Los lemas 24.10, 24.11, 24.14, 24.15 y 24.17 y el corolario 24.12 muestran como relajando después de INITIALIZE-SINGLE-SOURCE, se alcanzará el peso de la ruta más corta y el grafo de predecesores seráun árbol de rutas más cortas

Asumimos que no hay ciclos con peso negativo

Page 19: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

19

Algoritmo Bellman-Ford

Resuelve el problema de rutas más cortas desde una sola fuente

En el caso general puede haber arcos con pesos negativos

Dado un grafo dirigido, con pesos, con fuente s y función de pesos w : E R, regresa un valor booleano indicando si hay o no un ciclo con peso negativo que es alcanzable desde la fuente

Si existe un ciclo de este tipo, el algoritmo indica que no hay solución

Si no hay un ciclo de este tipo, el algoritmo produce las rutas más cortas y sus pesos

Page 20: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

20

Algoritmo Bellman-Ford

El algoritmo utiliza el proceso de relajación

Progresivamente decrementa un estimado d[v] sobre el peso de una ruta más corta de la fuente s a cada vértice v ∈ V hasta que llega al peso real de la ruta más corta δ(s,v)

Page 21: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

21

Algoritmo Bellman-Ford

Page 22: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

22

Algoritmo Bellman-Ford

Primero inicializa, línea 1Hace |V|-1 pasadas sobre los arcos, loop líneas 2-4

Relaja cada arco del grafo una vez

Checa si hay un ciclo con peso negativo, líneas 5-8Si hay regresa FALSESi no hay regresa TRUE

Tiempo de ejecuciónO(VE)

Inicialización Θ(V)Cada pasada (V-1 en total) por las líneas 2-4 Θ(E)Ciclo líneas 5-7 O(E)

Page 23: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

23

Algoritmo Bellman-Ford

Page 24: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

24

Algoritmo Bellman-Ford

Page 25: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

25

Algoritmo Bellman-Ford

Teorema 24.4 (el algoritmo de Bellman-Ford es correcto)

Si ejecutamos Bellman-Ford en un grafo dirigido, pesado G = (V,E) con fuente s y función de pesos w: E R.

Si G no contiene ciclos con peso negativo que sean alcanzables desde s

Entonces el algoritmo regresa TRUE

Tenemos d[v] = δ(s,v) para todos los vértices v ∈ V

El subgrafo de predecesores Gπ es un árbol de rutas más cortas con s como raíz .

Si G contiene un ciclo con peso negativo, alcanzable desde sEntonces el algoritmo regresa FALSE

Page 26: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

26

Rutas más Cortas desde una sola Fuente en Grafos Dirigidos Acíclicos (DAG)

Relajamos los arcos de un dag pesado, G = (V,E) de acuerdo a un ordenamiento topológico de sus vértices

Calculamos las rutas más cortas desde una sola fuente en tiempo Θ(V + E)

Las rutas más cortas siempre están bien definidas en un dag

Aún si hay arcos con pesos negativos, no puede existir un ciclo con peso negativo

Page 27: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

27

Rutas más Cortas desde una sola Fuente en Grafos Dirigidos Acíclicos (DAG)

Tiempo de ejecución total: Θ(V + E)

Ordenamiento topológico: Θ(V + E)

Llamada a Initialize-Single-Source: Θ(V)

Loop líneas 3-5: Θ(E)

Page 28: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

28

Rutas más Cortas desde una sola Fuente en Grafos Dirigidos Acíclicos (DAG)

El algoritmo primero ordena topológicamente el dagpara poner un orden en los vértices

Si hay una ruta de u a v, entonces u precede a v en el orden topológico

Se hace una pasada sobre los vértices ordenados topológicamente

Cada que se procesa un vértice, se relaja cada arco que sale del vértice

Page 29: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

29

Rutas más Cortas desde una sola Fuente en Grafos Dirigidos Acíclicos (DAG)

Page 30: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

30

Rutas más Cortas desde una sola Fuente en Grafos Dirigidos Acíclicos (DAG)

Page 31: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

31

Rutas más Cortas desde una sola Fuente en Grafos Dirigidos Acíclicos (DAG)

AplicaciónDiagramas de Pert (program evaluation and review technique)

Page 32: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

32

Algoritmo de Dijkstra

Resuelve el problema de rutas más cortas desde una sola fuente con un grafo dirigido y pesado G = (V, E) para el caso en que los pesos no son negativos

Asumimos que w(u,v) > 0 para cada arco (u,v) ∈ E

Page 33: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

33

Algoritmo de Dijkstra

Page 34: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

34

Algoritmo de Dijkstra

Mantiene un conjunto S de vértices para los cuales se ha determinado la ruta más corta desde la fuente s

Después selecciona un vértice u ∈ V – S con el estimado mínimo de ruta más corta

Añade u a S y relaja todos los arcos de salen de u

La implementación usa un Priority-Queue de vértices utilizando como llave los valores d

También mantiene el padre que llevó a la ruta más corta hasta ese momento, π[v]

Page 35: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

35

Algoritmo de Dijkstra

Page 36: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

36

Algoritmo de Dijkstra

Page 37: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

37

Algoritmo de Dijkstra

Page 38: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

38

Algoritmo de Dijkstra

Es un algoritmo vorazPorque siempre elige el vértice más ligero o más cercano en V –S para añadir al conjunto S

Dijkstra’s calcula rutas más cortas

Cada vez que se añade un vértice u al conjunto S, tenemos que d[u] = δ(s,u).

Page 39: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

39

Algoritmo de Dijkstra

Teorema 24.6 (El algoritmo de Dijkstra es correcto)El algoritmo de Dijkstra, ejecutado sobre un grafo pesado y dirigido G = (V, E) con una función de pesos no-negativos w y una fuente s, termina con d[u] = δ(s,u) para todos los vértices u ∈ V.

Corolario 24.7Si ejecutamos el algoritmo de Dijkstra sobre un grafo pesado y dirigido G = (V, E) con una función de pesos no-negativos w y una fuente s, entonces a la terminación, el subgrafo de predecesores Gπ es un árbol de rutas más cortas con s como raíz.

Page 40: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal

40

TAREA

Hacer una prueba de ciclo invariante para el algoritmo de Dijkstra