análisis y diseño de algoritmos ordenamiento en tiempo lineal
Post on 14-Feb-2017
236 Views
Preview:
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