CI2613: Algoritmos y Estructuras III Caminos de costo mı́nimo en grafos Blai Bonet Universidad Simón Bolı́var, Caracas, Venezuela Enero-Marzo 2015 c 2014 Blai Bonet Caminos de costo mı́nimo CI2613 Variantes del problema En las próximas clases nos enfocamos en calcular caminos de costo mı́nimo en grafos dirigidos G = (V, E) con pesos w : E → R Dado un camino p = (v0 , v1 , . . . , vk ), el peso o costo de p es la suma de los costos de las aristas en p: Pk w(p) = i=1 w(vi−1 , vi ) Existen diferentes variantes del problema. Las más importantes son: – Camino más corto entre un par de vértices dados – Caminos más cortos desde un mismo vértice fuente La distancia o peso δ(u, v) entre dos vértices u y v es el menor peso de los caminos de u a v: δ(u, v) = min {w(p) : p es un camino de u a v} – Caminos más cortos hacia un mismo vértice destino – Caminos más cortos entre todos los pares de vértices (donde min ∅ = ∞) Si p = u ; v es un camino de u a v tal que w(p) = δ(u, v), p es un camino más corto o un camino de costo mı́nimo c 2014 Blai Bonet CI2613 c 2014 Blai Bonet CI2613 Estructura óptima de los caminos más cortos Aristas y ciclos de costo negativo Ya que el costo de un camino es la suma de los costos de sus aristas, los caminos óptimos están compuestos por subcaminos óptimos En presencia de costos negativos es posible que no exista un camino más corto de u a v Lema (Principio de optimalidad de caminos más cortos) Sea p = (v0 , . . . , vi , . . . , vj , . . . , vk ) un camino de v0 a vk con vi = vj ; i.e. p contiene el ciclo c = (vi , . . . , vj = vi ) Sea G = (V, E) un digrafo con pesos w : E → R y p = (v0 , . . . , vk ) un camino más corto de v0 a vk . Entonces, el camino pij =(vi , . . . , vj ), para 1 ≤ i ≤ j ≤ k, es un camino más corto de vi a vj Si w(c) < 0, podemos formar caminos: p1 = p Prueba: suponga que pij no es óptimo. Entonces existe un camino q de vi a vj con w(q) < w(pij ) p2 = (v0 , . . . , c, c, . . . , vk ) Considere el camino p0 = (v0 , . . . , vi−1 , q, vj+1 , . . . , vk ) de v0 a vk ··· Su costo es: p3 = (v0 , . . . , c, c, c, . . . , vk ) con w(p1 ) > w(p2 ) > w(p3 ) > · · · w(p0 ) = w(p) − w(pij ) + w(q) < w(p) Definimos δ(v0 , vk ) = −∞ y no existe camino más corto de v0 a vk Por lo tanto, p no es óptimo contradiciendo la suposición c 2014 Blai Bonet CI2613 Aristas y ciclos de costo negativo: Ejemplo c 2014 Blai Bonet CI2613 Longitud de caminos de costo mı́nimo Sea p = (v0 , . . . , vk ) un camino de v0 a vk con w(p) = δ(v0 , vk ) a 3 −4 0 4 c 5 6 5 8 2 3 −∞ 2 – Análogamente, p no puede contener un ciclo c de costo positivo; ya que removiendo c obtendrı́amos un camino de v0 a vk de costo menor a δ(v0 , vk ) ∞ −∞ −8 3 j −3 e ∞ g d 11 i h −1 3 s – p no contiene un ciclo de costo negativo b f 7 – La única posibilidad para la existencia de un ciclo c en p es que w(c) = 0. Dicho ciclo se puede remover para obtener un camino óptimo de v0 a vk de menor longitud ∞ −∞ −6 Concluimos que si δ(u, v) ∈ / {−∞, ∞}, entonces existe un camino óptimo de u a v de longitud a los sumo |V | − 1 c 2014 Blai Bonet CI2613 c 2014 Blai Bonet CI2613 Dos propiedades sobre costos de caminos óptimos Representación de caminos óptimos Como en BFS, mantendremos un grafo de predecesores definido por “apuntadores padres” π[v] asociados a cada vértice v Lema (Desigualdad triangular) Si (u, v) ∈ E es una arista, δ(s, v) ≤ δ(s, u) + w(u, v) El grafo de predecesores relativo a la fuente s es Gπ = (Vπ , Eπ ): Prueba: si no existe camino s ; u, la desigualdad se cumple. En otro caso, considere un camino óptimo q de forma s ; u, y p = q → v. Tenemos, δ(s, v) ≤ w(p) = w(q) + w(u, v) = δ(s, u) + w(u, v) Vπ = {v ∈ V : π[v] 6= null} ∪ {s} Eπ = {(π[v], v) ∈ E : v ∈ Vπ \ {s}} Lema (Camino óptimo) Gπ termina en un árbol de caminos óptimos G0 = (V 0 , E 0 ) para s: Si s ; u → v es un camino óptimo, δ(s, v) = δ(s, u) + w(u, v) – G0 es un subgrafo de G; i.e. V 0 ⊆ V y E 0 ⊆ E Prueba: por principio de optimalidad, s ; u es camino óptimo. Entonces, δ(s, v) = w(s ; u → v) = w(s ; u) + w(u, v) = δ(s, u) + w(u, v) – G0 es un árbol con raı́z s c 2014 Blai Bonet – V 0 es el conjunto de vértices alcanzables desde s – el único camino de s a v en G0 es un camino óptimo en G CI2613 c 2014 Blai Bonet Representación de caminos óptimos: Ejemplo t 6 3 3 s 0 x t 9 3 s 1 0 3 2 5 6 t 6 3 3 0 3 2 11 5 z y x t 9 3 Los algoritmos para el cálculo de caminos más cortos desde un vértice fuente pueden entenderse como que realizan dos operaciones: 7 s 1 0 3 z x 6 9 – Inicializar-vertice-fuente(G,s): – Relajar(u,v,w): ejecutada una sola vez ejecutada varias veces para distintas aristas (u, v) 4 2 1 3 7 5 11 6 3 4 2 2 2 7 5 5 y c 2014 Blai Bonet 1 5 y s 9 4 2 7 5 Operaciones básicas x 6 3 4 2 CI2613 6 11 5 z y 6 11 z CI2613 c 2014 Blai Bonet CI2613 Inicializar-vertice-fuente(G,s) Relajar(u,v,w) Se ejecuta una sola vez para un grafo G = (V, E), antes de cualquier operación Relajar(u,v,w) 1 2 3 4 5 Se ejecuta múltiples veces para aristas (u, v) con peso w = w(u, v) 1 Inicializar-vertice-fuente(G,s): foreach Vertice v d[v] = ∞ π[v] = null d[s] = 0 2 3 4 Relajar(u,v,w): if d[v] > d[u] + w(u,v) d[v] = d[u] + w(u,v) π[v] = u Esta operación por si sola toma tiempo Θ(1) Esta operación por si sola toma tiempo Θ(V ) c 2014 Blai Bonet CI2613 c 2014 Blai Bonet Invariantes CI2613 Invariante 1 Lema (Cotas superiores) Para todo vértice v, d[v] ≥ δ(s, v). Si d[v] = δ(s, v), el valor d[v] no vuelve a cambiar A continuación establecemos 5 invariantes (propiedades) que se cumplen para cualquier secuencia σ de operaciones básicas tal que: Prueba: por inducción en el número n de operaciones en σ • Para n = 1: la operación es de inicialización. Después de la operación, d[v] = ∞ ≥ δ(s, v) para v 6= s y d[s] = 0 = δ(s, s) – la primera operación en σ es de inicialización – todas las operaciones en σ excepto la primera son de relajación c 2014 Blai Bonet CI2613 c 2014 Blai Bonet CI2613 Invariante 1 Invariante 2 Lema (Cotas superiores) Para todo vértice v, d[v] ≥ δ(s, v). Si d[v] = δ(s, v), el valor d[v] no vuelve a cambiar Lema (Inexistencia de caminos) Prueba: por inducción en el número n de operaciones en σ Si no existe un camino de s a v, d[v] = δ(s, v) = ∞ • Para n > 1: descomponemos σ = (σ 0 , op = Relajar(u,v,w)) con |σ 0 | = n − 1. Por HI, la propiedad se cumple después de ejecutar σ 0 Prueba: Si op no cambia el valor de d[v], la propiedad se cumple. Si lo cambia, Si no existe camino de s a v, δ(s, v) = ∞. Por Invariante 1, d[v] ≥ δ(s, v). Por lo tanto, d[v] = ∞ d[v] = d[u] + w(u, v) ≥ δ(s, u) + w(u, v) ≥ δ(s, v) Por HI y la desigualdad triangular sobre los valores δ(s, ·) Como Relajar(u,v,w) sólo puede decrementar d[v], una vez d[v] = δ(s, v) el valor no vuelve a cambiar c 2014 Blai Bonet CI2613 c 2014 Blai Bonet Invariante 3 CI2613 Invariante 4 Lema (Convergencia) Lema (Relajación monótona) Si s ; u → v es un camino óptimo de s a u, y d[u] = δ(s, u) antes de ejecutar Relajar(u,v,w), entonces d[v] = δ(s, v) después de la ejecución Si p = (v0 , . . . , vk ) es un camino óptimo de s = v0 a vk , y σ contiene (en orden) relajaciones de las aristas (v0 , v1 ), . . . , (vk−1 , vk ), entonces después de ejecutar σ, d[vi ] = δ(s, vi ) para todo i = 0, 1, . . . , k. Prueba: por la propiedad de camino óptimo, δ(s, v) = δ(s, u) + w(u, v) (Las relajaciones no tienen que ser consecutivas: entre cada par de ellas puede haber cualesquiera otras relajaciones) Por Invariante 1, d[v] ≥ δ(s, v) antes de la ejecución. Prueba: por inducción en i se muestra d[vi ] = δ(s, vi ) Si d[v] > δ(s, v) antes de la ejecución, • Para i = 0: d[v0 ] = d[s] = 0 = δ(s, s) d[v] > δ(s, v) = δ(s, u) + w(u, v) = d[u] + w(u, v) • Para i > 0: por HI d[vi−1 ] = δ(s, vi−1 ) antes de Relajar(vi−1 , vi , w) Luego, Relajar(u,v,w) cambia d[v] = d[u] + w(u, v) = δ(s, v) Como el camino s ; vi−1 → vi es óptimo, el Invariante 3 implica que después de Relajar(vi−1 , vi , w) se cumple d[vi ] = δ(s, vi ) Si d[v] = δ(s, v) antes de la ejecución, el valor d[v] no cambia c 2014 Blai Bonet CI2613 c 2014 Blai Bonet CI2613 Invariante 5 Lema (Árbol de caminos óptimos) Asuma que d[v] = δ(s, v) para todo vértice v, y que no existen ciclos de costo negativo alcanzables desde s. Entonces, el grafo de predecesores Gπ = (Vπ , Eπ ) es un árbol de caminos óptimos para s Prueba: ver el libro de texto c 2014 Blai Bonet CI2613