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

Post on 14-Feb-2017

237 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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 ),()(

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

δ

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

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.

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

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

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)

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

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 ++

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

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

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

15

Técnica de Relajación (Relaxation)15

Inicialización

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]

17

Técnica de Relajación (Relaxation)17

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

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

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)

21

Algoritmo Bellman-Ford

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)

23

Algoritmo Bellman-Ford

24

Algoritmo Bellman-Ford

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

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

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)

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

29

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

30

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

31

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

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

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

33

Algoritmo de Dijkstra

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]

35

Algoritmo de Dijkstra

36

Algoritmo de Dijkstra

37

Algoritmo de Dijkstra

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

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.

40

TAREA

Hacer una prueba de ciclo invariante para el algoritmo de Dijkstra

top related