596 views
# TDA | Practica 5 ejercicio 1 ## Enunciado 1. Dado un digrafo $D$ con pesos $c:E(D)\to\mathbb{N}$ y dos vértices $s$ y $t$, decimos que una arista $v\to w$ es $st$-$e\textit{ficiente cuando }v\to w\text{ pertenece a alg\'{u} n camino m\'{ı } nimo de }s$ a $t$. Sea $d(\cdot,\cdot)$ la función que indica el peso de un camino mínimo entre dos vértices. $a.$ Demostrar que $v\to w$ es $st$-eficiente si y sólo si $d(s,v)+c(v\to w)+d(w,t)=d(s,t).$ $b.$ Usando el inciso anterior, proponga un algoritmo eficiente que encuentre el mínimo de los caminos entre $s$ y $t$ que no use aristas $st$-eficientes. Si dicho camino no existe, el algoritmo retorna $\bot.$ ## Resolución - Nos dan un digrafo pesado - $v \to w$ es eficiente cuando esta arista pertenece a algún camino minimo de $s$ a $t$ - $d(.,.)$ indica el peso de un camino minimo entre dos vertices. ### a) - $v\to w$ es $st$-eficiente $\iff$ $d(s,v)+c(v \to w)+d(w,t)=d(s,t)$. - el primer $d(s,v)$ nos dice el peso del camino minimo entre $s,v$. - $c(v \to w)$ nos da el peso de esa arista $c \to w$. - $d(w,t)$ nos da el peso del camino minimo entre $w$ y $t$. - Esta ecuación indica que pertenece al camino minimo de $s$ a $t$. - Voy a armar la estructura de la demostración. - $v\to w$ es $st$-eficiente $\equiv A$ - $d(s,v)+c(v \to w)+d(w,t)=d(s,t) \ \equiv B$ - $A \iff B$ - Divido la demostración en partes: - $\Rightarrow)$ Quiero probar que $A \Rightarrow$ $B$, asumo $A$ verdadero - $\Leftarrow$) Quiero probar que $B \Rightarrow$ $A$, asumo $B$ verdadero - $\Rightarrow)$ $v\to w$ es $st$-eficiente, entonces $v \to w$ pertenece a algún camino minimo de $s$ a $t$. - Voy a asumir $B$ como verdadero y que entonces $A \Rightarrow B$. Lo cual significa que pertenece a algún camino mínimo de $s$ a $t$. - Voy a construir un camino mínimo que incluye $v \to w$: - sea el camino minimo desde $s$ hasta $t$ que pasa por $v$ y luego pasa por $w$. - Este camino se puede describir como la secuencia de aristas de $s$ a $v$, luego la arista $v \to w$ y finalmente las aristas que van de $w$ a $t$. - Por definición de camino mínimo, la suma de los pesos de estas aristas debe ser igual a la distancia minima de $s$ a $t$, o sea $d(s,t)$. - $d(s,v)+c(v \to w)+d(w,t)=d(s,t)$. - $\Leftarrow)$ $v \to w$ pertenece a algún camino mínimo de $s$ a $t$, entonces la arista $v \to w$ es $st$-eficiente. - Asumo verdadera $d(s,v)+c(v \to w)+d(w,t)=d(s,t)$ - Voy a construir un camino: - Si $d(s,v)+c(v \to w)+d(w,t)=d(s,t) = d(s,t)$, sugiere que hay un camino desde $s$ a $t$ que pasa por $v$ y que luego utiliza la arista $v \to w$, que continua desde $w$ a $t$, que su peso total es igual al del peso del camino mínimo. - Conclusión: - Por lo tanto cualquier otro camino que no incluya $v \to w$ y tenga un peso mayor o igual no puede ser camino minimo, implicando que cualquier camino que iguala el peso minimo debe incluir $v \to w$. - Esto significa que $v \to w$ es esencial para alcanzar la distancia mínima entre $s$ y $t$, demostrando que $v \to w$ es $st$-eficiente. ### b) - Dijkstra seguro para calcular la distancia minima $d(s,t)$ - Para cada arista $v \to w$ verifica que si cumple la condición de $st$-eficiencia. - $$d(s,v)+c(v \to w)+d(w,t)=d(s,t)$$ - Guardo las aristas que cumplen esta condición. - Creo una copia del digrafo original y elimino las aristas $st$-eficientes. - Vuelvo a aplicar el algoritmo de camino minimo al grafo modificado. - Si se encuentra un camino, retornar su peso. - Si no se encuentra, retornar indefinido.