![Page 1: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/15.jpg)
15
Técnica de Relajación (Relaxation)15
Inicialización
![Page 16: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/17.jpg)
17
Técnica de Relajación (Relaxation)17
![Page 18: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/21.jpg)
21
Algoritmo Bellman-Ford
![Page 22: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/23.jpg)
23
Algoritmo Bellman-Ford
![Page 24: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/24.jpg)
24
Algoritmo Bellman-Ford
![Page 25: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/33.jpg)
33
Algoritmo de Dijkstra
![Page 34: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/35.jpg)
35
Algoritmo de Dijkstra
![Page 36: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/36.jpg)
36
Algoritmo de Dijkstra
![Page 37: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/37.jpg)
37
Algoritmo de Dijkstra
![Page 38: Análisis y Diseño de Algoritmos Ordenamiento en Tiempo Lineal](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042600/58a2d4c71a28ab366e8b6fcc/html5/thumbnails/40.jpg)
40
TAREA
Hacer una prueba de ciclo invariante para el algoritmo de Dijkstra