30
Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

  • Upload
    vunhan

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Todos los Pares de Rutas más Cortas(All-Pairs Shortest Paths)

DR. JESÚS A. GONZÁLEZ BERNAL

CIENCIAS COMPUTACIONALES

INAOE

Page 2: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Problema de Encontrar todos los Pares de Rutas más Cortas

22

Encontrar las rutas más cortas entre todos los pares de vértices de un grafo

Es el problema para hacer una tabla de distancias entre todos los pares de ciudades en un Atlas de carreteras

Partimos de un grafo pesado y dirigido G = (V, E) con una función de pesos w : E R que mapea arcos a pesos con valores reales

Encontrar para cada par de vértices u, v ∈ VUna ruta más corta (con menor peso) de u a v

Donde el peso de la ruta es la suma de los pesos de sus arcos

Salida en forma tabularEntrada en renglón u y columna v es el peso de la ruta más corta entre u y v

Page 3: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Problema de Encontrar todos los Pares de Rutas más Cortas

33

Podemos resolver el problema ejecutando el algoritmo de rutas más cortas con una sola fuente |V| veces, una para cada vértice como la fuente

Si todos los pesos son no-negativos, podemos utilizar el algoritmo de Dijkstra

Con un arreglo lineal implementando una priority-queuepodemos tener un tiempo de O(V3 +VE) = O(V3)

Con min-heap binario para priority-queue, O(VElgV)Mejora para grafos poco densos

Con Fibonacci-heap para priority-queue O(V2lgV+VE)

Page 4: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Problema de Encontrar todos los Pares de Rutas más Cortas

44

Si hay pesos negativos ya no podemos utilizar DijkstraEntonces utilizaríamos Bellman-Ford (aunque más lento), una vez para cada vértice

O(V2E), que para un grafo denso se convierte en O(V4)

Estos tiempos se pueden mejorar con otros algoritmos

Algunos algoritmos utilizan representación de matriz de adyacencia y no la de lista de adyacencia como en los algoritmos de una sola fuente

Page 5: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Modelado del Problema55

Grafo dirigido y pesado, G = (V, E)

Representación de matriz de adyacencia

Pesos: W =(wij)

Se permiten arcos con peso negativo

El grafo de entrada no contiene ciclos con peso negativo

⎪⎩

⎪⎨

∉≠∞∈≠

==

E j) (i,y j i si E, j) (i,y j i si j) (i, dirigido arco del peso el

j, i si 0wij

Page 6: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Modelado del Problema66

Salida tabular de todos los pares de rutas más cortas

Matriz de n x n, D = (dij)

dij contiene el peso de una ruta más corta del vértice i al j

δ(i,j) denota el peso de la ruta más corta del vértice i al jEn la terminación del algoritmo dij = δ(i,j)

También calculamos una matriz de predecesoresΠ = (πij), con valor NIL si i = j o si no hay ruta de i a j y en otro caso πij es el predecesor de j para alguna ruta más corta desde i

Page 7: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Modelado del Problema77

Subgrafo predecesor El subgrafo inducido por el i-ésimo renglón de la matriz Π debe ser un árbol de rutas más cortas con raíz en i

El subgrafo predecesor de G para i se define como Gπ,i = (Vπ,i, Eπ,i), donde

Vπ,i = {j ∈ V : πij ≠ NIL} ∪ {i}, y

Eπ,i = {(πij, j) : j ∈ Vπ,i – {i}}.

Page 8: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Imprimir Ruta más Corta de i a j88

Dada la matriz de predecesores Π podemos imprimir la ruta más corta de i a j

Page 9: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Rutas más Cortas y Multiplicación de Matrices99

Solución con programación dinámica para el problema de todos los pares de rutas más cortas con un grafo dirigido G = (V, E)

Invoca operación parecida a multiplicación de matrices

Primer algoritmo Θ(V4)

Mejora en Θ(V3lgV)

Page 10: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Recordando Programación Dinámica1010

4 pasosCaracterizar la estructura de la solución óptima

Definir recursivamente el valor de una solución óptima

Calcular el valor de la solución óptima de manera bottom-up

Construir la solución óptima con la información calculada

Page 11: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Estructura de la Ruta más Corta, con Lema 24.111

kpjk

jpij

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

1

11

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

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.

)()'( ijij pwpw <

kpjk

jijp

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

1

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

Page 12: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Solución Recursiva para Todos los Pares de Rutas más Cortas

1212

Sea lij(m) el mínimo peso de una ruta del vértice i al j que tiene al menos m arcos

Cuando m = 0, hay una ruta más corta de i a j sin arcos sí y solo si i = j, entonces

Para m ≥ 1, calculamos lij(m) como el mínimo de lij

(m-1) y el mínimo peso de la ruta de i a j con a lo más m arcos

Con todos los posibles predecesores k de j

Los pesos de la ruta más corta están dados porδ(i,j) =lij

(n-1) = lij(n) = lij

(n+1) = ….

Hay a lo más n-1 arcos en la ruta más corta de i a j asumiendo que no hay ciclos con peso negativo

⎩⎨⎧

≠∞=

=j. i si j, i si 0)0(

ijl

)(min

}){min,min()1(

1

)(

)1(

1

)1()(

kjm

iknk

mij

kjm

iknk

mij

mij

wll

wlll

+=

+=

≤≤

≤≤

Page 13: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Calculando los Pesos de la Ruta más Corta Bottom-UP13

Tomamos como entrada la matriz W = (wij)

Calculamos las matricesL(1), L(2), …, L(n-1), donde para m = 1, 2, …, n-1 tenemos que L(m)

= (lij(m))

La matriz final tiene los pesos de las rutas más cortaslij

(1) = wij para todos los vértices i, j ∈ V, entonces L(1) = W

Page 14: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo1414

Dadas las matrices L(m-1) y W regresa L(m)

Extiende las rutas más cortas obtenidas hasta ahora con un arco

Page 15: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo15

El algoritmo se basa en la ecuación recursiva

Tiempo de ejecución Θ(n3) por los ciclos anidados

Parecido a multiplicación de matrices

Page 16: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo1616

Algoritmo para encontrar todos los pares de rutas más cortas

Basado en Extend-Shortest-Paths

Este algoritmo se ejecuta en un tiempo de Θ(n4)

Page 17: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Ejemplo1717

Page 18: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo más Rápido1818

No queremos calcular L(m) porque el resultado lo tenemos desde L(n-1) asumiendo que no hay ciclos con peso negativo, L(m) = L(n-1) para todos los enteros m ≥ n-1

Podemos calcular L(n-1) en ceiling(lg(n-1)) con la secuencia:L(1) = W

L(2) = W2 = W ⋅ W

L(4) = W4 = W2 ⋅ W2

L(8) = W8 = W4 ⋅ W4

L(2 ⎡ lg(n-1)⎤ ) = W2 ⎡ lg(n-1)⎤ = W2 ⎡ lg(n-1)⎤ -1 ⋅ W2 ⎡ lg(n-1)⎤ -1

Continuamos hasta L(2 ⎡ lg(n-1)⎤ )

Proceso conocido como técnica de “repeating squaring”Requiere solo ⎡lg(n-1)⎤ productos de matrices, llamadas a Extend

Page 19: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo más Rápido1919

Tiempo de ejecución Θ(n3lg n)

Page 20: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo Floyd-Warshall20

Utiliza un enfoque diferente de programación dinámica

Tiempo de ejecución de Θ(V3)

Puede haber vértices con peso negativo pero no ciclos con peso negativo

Seguimos el proceso de programación dinámica para desarrollar el algoritmo

Page 21: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo Floyd-Warshall21

Considera los vértices intermedios de una ruta más cortaSi p = <v1, v2, …, vl>

v2 … vl-1 son los vértices intermedios

El algoritmo Floyd-Warshall trabaja reduciendo sucesivamente el número de vértices intermedios que pueden ocurrir en una ruta más corta y sus subrutas

Sea el grafo G = (V, E) con vértices V numerados de 1...n, V = {1, 2, …, n}, y considerando un subconjunto {1, 2, …, k} para algún k

Sea p el mínimo peso de ruta desde el vértice i al vértice j para el que los vértices intermedios son tomados de {1, 2, …, k}, puede ocurrir una de dos situaciones:

Page 22: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo Floyd-Warshall22

1) k no es un vértice intermedio de pi ↝p jContiene los vértices de {1, 2, …, k-1}

2) k es un vértice intermedio de pi ↝p1 k ↝p2 jContiene los vértices de {1, 2, …, k-1}p1 es la ruta más corta desde 1 a kp2 es la ruta más corta desde k a jEsto por el lema 24.1

Page 23: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Solución Recursiva23

Sea dij(k) el peso de la ruta más corta desde i a j con

todos los vértices intermedios en {1, 2, …, k}Como para cada ruta, los vértices intermedios están en el conjunto {1, 2, …, n}, la matriz D(n) = (dij

(n)) contendrá la solución final δ(i,j) para cada i, j ∈ V.Recurrencia:

||)],,([][

1 k si ),min(0 k si

)()(

)1()1()1()(

VnjidD

dddw

d

nij

n

kkj

kik

kij

ijkij

===⎩⎨⎧

≥+=

= −−−

δ

Page 24: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Algoritmo24

Calcula valores dij(k) en orden creciente de los valores de k

Entrada, matriz nxn W

Regresa D(n) con los pesos de las rutas más cortas

Tiempo de ejecución es Θ(n3), mejor que los anteriores con O(n3lgn) y O(n4)

Page 25: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Ejemplo25

Page 26: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Ejemplo26

Page 27: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Ejemplo27

Page 28: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Ejemplo28

Page 29: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Construcción de la Ruta más Corta29

Hay varios métodos de construir las rutas con el algoritmo Floyd-Warshall

Construir la matriz D de pesos de rutas más cortas y luego la matriz de predecesores Π a partir de D

Construir la matriz de predecesores en línea, conforme el algoritmo Floyd-Warshall construye las matrices D(k)

⎪⎩

⎪⎨⎧

+>+≤

=

⎩⎨⎧

∞≤≠∞==

=

−−−−

−−−−

)1()1()1()1(

)1()1()1()1()(

ij

ij)0(

si si

. y w j i si i, wó j i si

kkj

kik

kij

kkj

kkj

kik

kij

kijk

ij

ij

dddddd

NIL

ππ

π

π

Page 30: Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths)jagonzalez/ADA/APMSP.pdf · Algoritmo Floyd-Warshall 21 yConsidera los vértices intermedios de una ruta más corta

Ejercicio

Ejecute el algoritmo de Floyd Warshall para el siguiente grafo