MOR - Tema 3

MOR
Modelos de Optimización de Redes
Teoría de Grafos
Optimización
2026-01-12
90 min de lectura

Camino de menor valor

Conjunto de caminos desde un nodo. Definición

Sea R=(V,A,p)R = (V, A, p) red orientada con raíz de salida ii, sea jVj \in V nodo cualquiera denotamos al conjunto de caminos que van de ii a jj como Πij\Pi_{ij}, es decir,

Πij={PP es un camino en R que va de i a j}\begin{align*} \Pi_{ij} = \{P \mid P \text{ es un camino en } R \text{ que va de } i \text{ a } j\}\\ \end{align*}

Valor de un camino. Definición

Sea R=(V,A,p)R = (V, A, p) red orientada con raíz de salida ii y sea πijΠij\pi_{ij} \in \Pi_{ij} camino definido como:

ipi,i1i1pi1,i2i2im1pim1,jj\begin{align*} i \xrightarrow[]{p_{i, i_1}} i_1 \xrightarrow[]{p_{i_1, i_2}} i_2 \xrightarrow[]{} \ldots \xrightarrow[]{} i_{m-1} \xrightarrow[]{p_{i_{m-1}, j}} j \end{align*}

definimos el valor del camino como la suma de los pesos de los arcos que lo forman:

p(πij)=eπijp(e)=pi,i1+pi1,i2++pim1,j\begin{align*} p(\pi_{ij}) = \displaystyle \sum_{e \in \pi_{ij}} p(e) = p_{i, i_1} + p_{i_1, i_2} + \ldots + p_{i_{m-1}, j}\\ \end{align*}

Camino de valor mínimo. Definición

Sea R=(V,A,p)R = (V, A, p) red orientada con raíz de salida ii y sea jVj \in V nodo cualquiera. Definimos el camino de valor mínimo como el camino πijΠij\pi_{ij}' \in \Pi_{ij} que cumple:

p(πij)=minπijΠijp(πij)\begin{align*} p(\pi_{ij}') = \min_{\pi_{ij} \in \Pi_{ij}} p(\pi_{ij}) \end{align*}

✏️Ejemplo

¿Los caminos de mínimo valor de una raíz de salida rr al resto de los vértices forman siempre una arborescencia de unión de salida en rr?

En general, esto no es cierto. Por ejemplo:

TikZ Graph

Si consideramos los caminos de mínimo valor desde rr al resto de vértices, obtenemos:

TikZ Graph

Observamos que el arco (r,c)(r, c) no pertenece al conjunto de caminos de mínimo valor, pero el conjunto de caminos de mínimo valor no forma una arborescencia de unión de salida en rr ya que el nodo cc tiene grado de entrada 2.

No obstante, en el caso particular de que los caminos de valor mínimo sean únicos, entonces si forman una arborescencia de unión de salida en rr.

Teorema 3.1. Caracterización de los caminos de valor mínimo

Sea R=(V,A,p)R = (V, A, p) red con raíz de salida ii, se cumple que:

πijΠij CVM jV     circuitos de valor negativo en R\begin{align*} \exists \pi_{ij}' \in \Pi_{ij} \texttt{ CVM } \forall j \in V \iff \nexists \text{ circuitos de valor negativo en } R\\ \end{align*}

📐Demostración

  • )\Rightarrow) Sea π\pi circuito con p(π)<0p(\pi) < 0 y sea jVj \in V, por hipótesis existe un camino de valor mínimo πij\pi_{ij} desde ii a jj. Consideramos el camino:
πij=πijπ    πijΠij\begin{align*} \pi_{ij}' = \pi_{ij} \cup \pi \implies \pi_{ij}' \in \Pi_{ij} \end{align*}

Entonces, si calculamos el valor del camino πij\pi_{ij}':

p(πij)=p(πij)+p(π)<p(πij)\begin{align*} p(\pi_{ij}') = p(\pi_{ij}) + p(\pi) < p(\pi_{ij}) \end{align*}

lo cual contradice la hipótesis de que πij\pi_{ij} es un CVM desde ii a jj.

  • )\Leftarrow) Como Ds(i)=VDs(i) = V ya que ii es la raíz de salida, existe al menos un camino de ii a cualquier vértice jVj \in V. Veamos que existe un camino de valor mínimo desde ii a jj.

Al no existir circuitos de valor negativo, nos basta con encontrar el camino de menor valor entre los caminos elementales. Como el grafo es finito, el número de caminos elementales entre ii y jj es finito y por tanto, los pesos asociados a dichos caminos es una colección finita de números reales. Por tanto, existe el mínimo entre ellos, que corresponderá al camino de valor mínimo desde ii a jj.

Valor del camino trivial

Sea R=(V,A,p)R = (V, A, p) red orientada con raíz de salida ii. Consideramos el camino trivial πii\pi_{ii} que va desde ii a ii sin pasar por ningún otro vértice. El valor del camino trivial es:

p(πii)=0\begin{align*} p(\pi_{ii}) = 0 \end{align*}

✏️Ejemplo

Si no hay circuito de valor negativo, ¿el camino trivial es un CMV de ii a ii? ¿Y es único?

Si no hay circuito de valor negativo, el camino trivial es un CMV de ii a ii ya que cualquier otro camino desde ii a ii tendrá un valor mayor o igual a 0. No obstante, el camino trivial no tiene por qué ser único. Por ejemplo:

TikZ Graph

En este caso, el camino trivial πii\pi_{ii} tiene valor 0, pero también existe otro camino desde ii a ii que pasa por aa y tiene valor 2+(2)=02 + (-2) = 0. Por tanto, el camino trivial no es único.

Consecuencia del Teorema 3.1

A partir del Teorema 3.1, se deduce que si no existen circuitos de valor negativo en la red R=(V,A,p)R = (V, A, p), es suficiente buscar caminos elementales para encontrar los caminos de valor mínimo desde la raíz de salida ii al resto de vértices jVj \in V.

Teorema 3.2. Subcaminos de caminos de valor mínimo

Sea R=(V,A,p)R = (V, A, p) red orientada y πrs\pi_{rs} camino de menor valor de rr a ss en RR, entonces se tiene que cualquier subcamino πri\pi_{ri} de πrs\pi_{rs} es un camino de menor valor de rr a ii en RR, para cualquier ii vértice en πrs\pi_{rs} con iri \neq r y isi \neq s.

📐Demostración

Sea πrs\pi_{rs} camino de menor valor de rr a ss y sea πri\pi_{ri} subcamino de πrs\pi_{rs} con vértice final ii, supongamos que no es de menor valor, entonces:

πriΠri tal que p(πri)<p(πri)\begin{align*} \exists \pi_{ri}' \in \Pi_{ri} \quad \text{ tal que } \quad p(\pi_{ri}') < p(\pi_{ri}) \end{align*}

Consideramos ahora el camino dado por:

πrs=πri(πrsπri)\begin{align*} \pi_{rs}' = \pi_{ri}' \cup (\pi_{rs} - \pi_{ri}) \end{align*}

Y entonces se tiene que πrs\pi_{rs}' es un camino de rr a ss y su valor es:

p(πrs)=p(πri)+p(πrsπri)<p(πri)+p(πrsπri)=p(πrs)\begin{align*} p(\pi_{rs}') = p(\pi_{ri}') + p(\pi_{rs} - \pi_{ri}) < p(\pi_{ri}) + p(\pi_{rs} - \pi_{ri}) = p(\pi_{rs}) \end{align*}

Lo cual contradice que πrs\pi_{rs} sea camino de menor valor de rr a ss. Por lo tanto, cualquier subcamino de un camino de menor valor es también un camino de menor valor.

Consecuencia del Teorema 3.2

A partir del Teorema 3.2, se deduce que al obtener un camino de valor mínimo desde la raíz de salida rr a un vértice ss, con el mínimo esfuerzo ya tenemos los caminos de valor mínimo desde rr a todos los vértices intermedios que forman el camino de rr a ss.

Algoritmo de Ford-Moore-Bellman

Este algoritmo se puede emplear para obtener un camino de valor mínimo desde un vértice fijado a todos los demás vértices de una red orientada independientemente del valor de los pesos de los arcos, es decir, p(e)Rp(e) \in \mathbb{R} para cualquier eAe \in A. No obstante, su tiempo de ejecución es O(n2m)O(n^2m).

Teorema 3.3. Condición suficiente y necesaria para caminos de valor mínimo

Sea R=(V,A,p)R = (V, A, p) red orientada y d(i)d(i) el valor de un camino πri\pi_{ri} desde rr a ii en RR, para cada iVi \in V. Entonces, los caminos πri\pi_{ri} son caminos de valor mínimo desde rr a ii en RR si y solo si se cumplen las siguientes condiciones:

  • d(r)=0d(r) = 0
  • d(j)d(i)+pij(i,j)Ad(j) \leq d(i) + p_{ij} \quad \forall (i, j) \in A

📐Demostración

  • \Rightarrow) Sea (i,j)A(i, j) \in A cualquiera, por hipótesis sabemos que:

  • \Leftarrow) Suponiendo que d(j)d(i)pijd(j) - d(i) \leq p_{ij} para todo (i,j)A(i, j) \in A veamos que la familia de caminos πri\pi_{ri} es de valor mínimo desde rr a ii para todo iVi \in V.

Sea iVi \in V cualquiera, consideramos un camino πri\pi_{ri}' formado por:

πri=ri1i2iqi\begin{align*} \pi_{ri}' = r \xrightarrow[]{} i_1 \xrightarrow[]{} i_2 \xrightarrow[]{} \ldots \xrightarrow[]{} i_{q} \xrightarrow[]{} i \end{align*}

Entonces, aplicando expresión d(j)d(i)pijd(j) - d(i) \leq p_{ij} a cada arco del camino πri\pi_{ri}', obtenemos:

d(i)d(iq)piqid(iq)d(iq1)piq1iqd(i1)d(r)pri1\begin{align*} d(i) - d(i_q) & \leq p_{i_q i} \\ d(i_q) - d(i_{q-1}) & \leq p_{i_{q-1} i_q} \\ \vdots & \vdots \\ d(i_1) - d(r) & \leq p_{r i_1} \end{align*}

Sumando todas estas desigualdades, obtenemos:

d(i)d(r)eπrip(e)=p(πri)\begin{align*} d(i) - d(r) & \leq \displaystyle \sum_{e \in \pi_{ri}'} p(e) = p(\pi_{ri}') \end{align*}

Y como d(r)=0d(r) = 0, tenemos que:

d(i)=p(πri)p(πri)πriΠri\begin{align*} d(i) = p(\pi_{ri}) \leq p(\pi_{ri}') \quad \forall \pi_{ri}' \in \Pi_{ri} \end{align*}

Por tanto, p(πri)p(\pi_{ri}) es el valor mínimo entre todos los caminos desde rr a ii, es decir, πri\pi_{ri} es un camino de valor mínimo desde rr a ii.

Descripción del Algoritmo de Ford-Moore-Bellman

Sea R=(V,A,p)R = (V, A, p) red con raíz de salida rr, consideramos pijRp_{ij} \in \mathbb{R} para cualquier (i,j)A(i, j) \in A y consideramos que no existen circuitos de valor negativo en RR entonces, el algoritmo de Ford-Moore-Bellman se describe a continuación:

  1. Tomar V=V{r}V' = V \setminus \{r\} y se definen:
d(i)={0 si i=rpri si iΓ+(r)+ en otro casoyI(i)={r si iΓ+(r)0 en otro caso\begin{align*} d(i) = \left\{ \begin{array}{ll} 0 & \text{ si } i = r\\ p_{ri} & \text{ si } i \in \Gamma^+(r)\\ +\infty & \text{ en otro caso} \end{array} \right. \qquad \text{y} \qquad I(i) = \left\{ \begin{array}{ll} r & \text{ si } i \in \Gamma^+(r)\\ 0 & \text{ en otro caso} \end{array} \right. \end{align*}
  1. Sea vVv \in V' tal que d(v)=miniVd(i)d(v) = \min_{i \in V'} d(i) entonces:

  2. Repetir el paso 2 hasta que V=V' = \emptyset

💡Nota

Una vez completado el algoritmo, el valor d(i)d(i) representa el valor del camino de valor mínimo desde rr a ii. Para obtener dichos caminos utilizamos las etiquetas II hacia atrás, es decir:

r=I(I(I(i)))\begin{align*} r = I(\dots I(I(i))) \end{align*}

✏️Ejemplo

Dada la siguiente red orientada con raíz de salida 1, aplicar el algoritmo de Ford-Moore-Bellman para obtener los caminos de valor mínimo desde la raíz de salida al resto de vértices.

TikZ Graph

Aplicando los pasos del algoritmo, obtenemos:

  1. Sea r=1r = 1 entonces tenemos V={2,3,4,5}V' = \{2, 3, 4, 5\} y Γ+(1)={2,3,5}\Gamma^+(1) = \{2, 3, 5\}, por tanto:
12345d(i)0238I(i)01101\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 2 & 3 & \infty & 8 \\ I(i) & 0 & 1 & 1 & 0 & 1 \\ \end{array}
  1. Veamos cual es el vértice vVv \in V' con d(v)d(v) mínimo, es decir:
d(v)=min{d(2),d(3),d(4),d(5)}=min{2,3,,8}=2    v=2\begin{align*} d(v) = \min\{d(2), d(3), d(4), d(5)\} = \min\{2, 3, \infty, 8\} = 2 \implies v = 2 \end{align*}

Actualizamos V={3,4,5}V' = \{3, 4, 5\} y tenemos Γ+(2)={1}\Gamma^+(2) = \{1\} calculamos:

t1=d(2)+p21=2+2=4d(1)=0\begin{align*} t_1 = d(2) + p_{21} = 2 + 2 = 4 \not< d(1) = 0 \end{align*}

Por tanto, no actualizamos nada. Ahora, como VV' \neq \emptyset, repetimos el paso 2. 3. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(3),d(4),d(5)}=min{3,,8}=3    v=3\begin{align*} d(v) = \min\{d(3), d(4), d(5)\} = \min\{3, \infty, 8\} = 3 \implies v = 3 \end{align*}

Actualizamos V={4,5}V' = \{4, 5\} y tenemos Γ+(3)={4,5}\Gamma^+(3) = \{4,5\} calculamos:

t4=d(3)+p34=3+2=5<d(4)=t5=d(3)+p35=3+7=10d(5)=8\begin{align*} t_4 & = d(3) + p_{34} = 3 + 2 = 5 < d(4) = \infty\\ t_5 & = d(3) + p_{35} = 3 + 7 = 10 \not< d(5) = 8 \end{align*}

Como t4<d(4)t_4 < d(4), actualizamos esa entrada de la tabla:

12345d(i)02358I(i)01131\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 2 & 3 & \textcolor{red}{5} & 8 \\ I(i) & 0 & 1 & 1 & 3 & 1 \\ \end{array}

Ahora, como VV' \neq \emptyset, repetimos el paso 2. 4. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(4),d(5)}=min{5,8}=5    v=4\begin{align*} d(v) = \min\{d(4), d(5)\} = \min\{5, 8\} = 5 \implies v = 4 \end{align*}

Actualizamos V={5}V' = \{5\} y tenemos Γ+(4)={2}\Gamma^+(4) = \{2\} calculamos:

t2=d(4)+p42=5+(4)=1<d(2)=2\begin{align*} t_2 = d(4) + p_{42} = 5 + (-4) = 1 < d(2) = 2 \end{align*}

Por tanto, actualizamos esa entrada de la tabla:

12345d(i)01358I(i)04131\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & \textcolor{red}{1} & 3 & 5 & 8 \\ I(i) & 0 & 4 & 1 & 3 & 1 \\ \end{array}

Ahora, como VV' \neq \emptyset, repetimos el paso 2. 5. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(5)}=8    v=5\begin{align*} d(v) = \min\{d(5)\} = 8 \implies v = 5 \end{align*}

Actualizamos V=V' = \emptyset y tenemos Γ+(5)={3}\Gamma^+(5) = \{3\} calculamos:

t3=d(5)+p53=8+7=15d(3)=3\begin{align*} t_3 = d(5) + p_{53} = 8 + 7 = 15 \not< d(3) = 3 \end{align*}

Por tanto, no actualizamos nada. Ahora, como V=V' = \emptyset, el algoritmo termina.

El resultado final del algoritmo es:

12345d(i)01358I(i)04131\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 1 & 3 & 5 & 8 \\ I(i) & 0 & 4 & 1 & 3 & 1 \\ \end{array}

Así, los caminos de valor mínimo desde la raíz de salida 1 al resto de vértices son:

  • Camino de 1 a 2: 1421 \xrightarrow[]{} 4 \xrightarrow[]{} 2 con valor 1
  • Camino de 1 a 3: 131 \xrightarrow[]{} 3 con valor 3
  • Camino de 1 a 4: 1341 \xrightarrow[]{} 3 \xrightarrow[]{} 4 con valor 5
  • Camino de 1 a 5: 151 \xrightarrow[]{} 5 con valor 8
  • Camino de 1 a 1: camino trivial con valor 0

Además, podemos construir la arborescencia de unión de salida formada por los caminos de valor mínimo:

TikZ Graph

💡Nota

En el ejercicio anterior, la arborescencia de unión de salida formada por los caminos de valor mínimo no es una arborescencia de salida de valor mínimo, ya que:

p(T)=p13+p34+p42+p15=3+2+(4)+8=9\begin{align*} p(T) & = p_{13} + p_{34} + p_{42} + p_{15} = 3 + 2 + (-4) + 8 = 9 \end{align*}

No obstante, si consideramos la arborescencia de salida:

TikZ Graph

p(T)=p13+p34+p42+p35=3+2+(4)+7=8\begin{align*} p(T) & = p_{13} + p_{34} + p_{42} + p_{35} = 3 + 2 + (-4) + 7 = 8 \end{align*}

Algoritmo de Dijkstra

El algoritmo de Dijkstra se puede emplear para obtener un camino de valor mínimo desde un vértice fijado a todos los demás vértices de una red orientada siempre que los pesos de los arcos sean no negativos, es decir, p(e)0p(e) \geq 0 para cualquier eAe \in A. Su tiempo de ejecución es O(n2)O(n^2).

Teorema 3.4. Condición suficiente para caminos de valor mínimo

Sea R=(V,A,p)R = (V, A, p) red orientada con raíz de salida rr y p(e)0p(e) \geq 0 para cualquier eAe \in A, una colección de caminos de rr a ii para cada iV{r}i \in V \setminus \{r\}, cada uno de valor d(i)d(i) y, además, existe un conjunto VV{r}V' \subseteq V \setminus \{r\} tal que:

d(i)={ valor de un CMV de r a i si iVVminjΓ(i)(VV){d(j)+pji} si iV(jVVΓ+(j))\begin{align*} d(i) = \left\{ \begin{array}{ll} \text{ valor de un CMV de } r \text{ a } i & \text{ si } i \in V \setminus V'\\[2ex] \displaystyle \min_{j \in \Gamma^-(i) \cap (V \setminus V')} \{d(j) + p_{ji}\} & \text{ si } i \in V' \cap \left( \displaystyle \bigcup_{j \in V\setminus V'} \Gamma^+(j)\right) \end{array} \right. \end{align*}

Si vVv \in V' cumple que d(v)=miniVd(i)d(v) = \displaystyle \min_{i \in V'} d(i), entonces d(v)d(v) es el valor de un CMV desde rr a vv.

📐Demostración (no entra)

Sea vVv \in V' tal que d(v)=miniVd(i)d(v) = \displaystyle \min_{i \in V'} d(i). Tenemos vVV{r}v \in V' \subseteq V \setminus \{r\} y, por hipótesis, d(v)d(v) denota el valor de un camino desde rr a vv. Veamos que es un camino de valor mínimo.

Sea πrv\pi_{rv} camino cualquiera de rr a vv y denotamos:

  • ss al primer vértices en πrv\pi_{rv} que pertenece a VV'
  • tt al antecesor de ss en πrv\pi_{rv}

Por lo tanto, tenemos que tVt \notin V y, así:

p(πrv)=p(πrt)+pts+p(πsv)\begin{align*} p(\pi_{rv}) = p(\pi_{rt}) + p_{ts} + p(\pi_{sv}) \end{align*}

Como tVVt \in V \setminus V', sabemos que d(t)d(t) es el valor de un camino de menor valor de rr a tt y, por tanto, p(πrt)d(t)p(\pi_{rt}) \geq d(t). Además, como por hipótesis todos los pesos son positivos, se tiene que p(πsv)0p(\pi_{sv}) \geq 0 y, por tanto:

p(πrv)=p(πrt)+pts+p(πsv)d(t)+pts\begin{align*} p(\pi_{rv}) = p(\pi_{rt}) + p_{ts} + p(\pi_{sv}) \geq d(t) + p_{ts} \end{align*}

Como sVs \in V' y (t,s)A(t, s) \in A entonces sΓ+(t)s \in \Gamma^{ + }(t) y por tanto:

sjVΓ+(j)    sV(jVVΓ+(j))\begin{align*} s \in \displaystyle \bigcup_{j \in V'} \Gamma^{ + }(j) \implies s \in V' \cap \left( \displaystyle \bigcup_{j \in V\setminus V'} \Gamma^+(j)\right) \end{align*}

Aplicando la hipótesis de la definición de d(s)d(s), tenemos que:

d(s)=minjΓ(s)(VV){d(j)+pjs}tΓ(s)(VV)d(t)+pts\begin{align*} d(s) = \min_{j \in \Gamma^-(s) \cap (V \setminus V')} \{d(j) + p_{js}\} \overset{t \in \Gamma^-(s) \cap (V \setminus V')}{\leq} d(t) + p_{ts} \end{align*}

Como estamos suponiendo que d(v)=miniVd(i)d(v) = \min_{i \in V'} d(i) y sVs \in V', entonces:

d(v)d(s)d(t)+ptsp(πrv)\begin{align*} d(v) \leq d(s) \leq d(t) + p_{ts} \leq p(\pi_{rv}) \end{align*}

Y esto se cumple para cualquier camino πrv\pi_{rv} desde rr a vv, por lo que d(v)d(v) es el valor de un camino de valor mínimo desde rr a vv.

💡Nota

Notar que VVV \setminus V' representa el conjunto de vértices para los cuales ya se ha encontrado un camino de valor mínimo desde la raíz de salida rr. Por otro lado, VV' representa el conjunto de vértices para los cuales aún no se ha encontrado un camino de valor mínimo desde rr.

Descripción del Algoritmo de Dijkstra

Sea R=(V,A,p)R = (V, A, p) red con raíz de salida rr y p(e)0p(e) \geq 0 para cualquier eAe \in A, entonces el algoritmo de Dijkstra se describe a continuación:

  1. Tomar V=V{r}V' = V \setminus \{r\} y se definen:
d(i)={0 si i=rpri si iΓ+(r)+ en otro casoyI(i)={r si iΓ+(r)0 en otro caso\begin{align*} d(i) = \left\{ \begin{array}{ll} 0 & \text{ si } i = r\\ p_{ri} & \text{ si } i \in \Gamma^+(r)\\ +\infty & \text{ en otro caso} \end{array} \right. \qquad \text{y} \qquad I(i) = \left\{ \begin{array}{ll} r & \text{ si } i \in \Gamma^+(r)\\ 0 & \text{ en otro caso} \end{array} \right. \end{align*}
  1. Sea vVv \in V' tal que d(v)=minjVd(i)d(v) = \min_{j \in V'} d(i) entonces:

  2. Repetir el paso 2 hasta que V=V' = \emptyset

💡Nota

Una vez completado el algoritmo, el valor d(i)d(i) representa el valor del camino de valor mínimo desde rr a ii. Para obtener dichos caminos utilizamos las etiquetas II hacia atrás, es decir:

r=I(I(I(i)))\begin{align*} r = I(\dots I(I(i))) \end{align*}

✏️Ejemplo

Dada la siguiente red orientada con raíz de salida 1, aplicar el algoritmo de Dijkstra para obtener los caminos de valor mínimo desde la raíz de salida al resto de vértices.

TikZ Graph

Aplicando los pasos del algoritmo, obtenemos:

  1. Sea r=1r = 1 entonces tenemos V={2,3,4,5}V' = \{2, 3, 4, 5\} y Γ+(1)={2,3,5}\Gamma^+(1) = \{2, 3, 5\}, por tanto:
12345d(i)0238I(i)01101\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 2 & 3 & \infty & 8 \\ I(i) & 0 & 1 & 1 & 0 & 1 \\ \end{array}
  1. Veamos cual es el vértice vVv \in V' con d(v)d(v) mínimo, es decir:
d(v)=min{d(2),d(3),d(4),d(5)}=min{2,3,,8}=2    v=2\begin{align*} d(v) = \min\{d(2), d(3), d(4), d(5)\} = \min\{2, 3, \infty, 8\} = 2 \implies v = 2 \end{align*}

Actualizamos V={3,4,5}V' = \{3, 4, 5\} y tenemos Γ+(2)={1}\Gamma^+(2) = \{1\} entones Γ+(2)V=\Gamma^{ + }(2) \cap V' = \emptyset, por tanto, no actualizamos nada. Ahora, como VV' \neq \emptyset, repetimos el paso 2. 3. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(3),d(4),d(5)}=min{3,,8}=3    v=3\begin{align*} d(v) = \min\{d(3), d(4), d(5)\} = \min\{3, \infty, 8\} = 3 \implies v = 3 \end{align*}

Actualizamos V={4,5}V' = \{4, 5\} y tenemos Γ+(3)={4,5}\Gamma^+(3) = \{4,5\} entonces Γ+(3)V={4,5}\Gamma^{ + }(3) \cap V' = \{4,5\}, calculamos:

t4=d(3)+p34=3+2=5<d(4)=t5=d(3)+p35=3+7=10d(5)=8\begin{align*} t_4 & = d(3) + p_{34} = 3 + 2 = 5 < d(4) = \infty\\ t_5 & = d(3) + p_{35} = 3 + 7 = 10 \not< d(5) = 8 \end{align*}

Como t4<d(4)t_4 < d(4), actualizamos esa entrada de la tabla

12345d(i)02358I(i)01131\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 2 & 3 & \textcolor{red}{5} & 8 \\ I(i) & 0 & 1 & 1 & 3 & 1 \\ \end{array}

Ahora, como VV' \neq \emptyset, repetimos el paso 2. 4. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(4),d(5)}=min{5,8}=5    v=4\begin{align*} d(v) = \min\{d(4), d(5)\} = \min\{5, 8\} = 5 \implies v = 4 \end{align*}

Actualizamos V={5}V' = \{5\} y tenemos Γ+(4)={2}\Gamma^+(4) = \{2\} entonces Γ+(4)V=\Gamma^{ + }(4) \cap V' = \emptyset, por tanto, no actualizamos nada. Ahora, como VV' \neq \emptyset, repetimos el paso 2. 5. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(5)}=8    v=5\begin{align*} d(v) = \min\{d(5)\} = 8 \implies v = 5 \end{align*}

Actualizamos V=V' = \emptyset y tenemos Γ+(5)={3}\Gamma^+(5) = \{3\} entonces Γ+(5)V=\Gamma^{ + }(5) \cap V' = \emptyset, por tanto, no actualizamos nada. Ahora, como V=V' = \emptyset, el algoritmo termina.

El resultado final del algoritmo es:

12345d(i)02358I(i)01131\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 2 & 3 & 5 & 8 \\ I(i) & 0 & 1 & 1 & 3 & 1 \\ \end{array}

Así, los caminos de valor mínimo desde la raíz de salida 1 al resto de vértices son:

  • Camino de 1 a 2: 121 \xrightarrow[]{} 2 con valor 2
  • Camino de 1 a 3: 131 \xrightarrow[]{} 3 con valor 3
  • Camino de 1 a 4: 1341 \xrightarrow[]{} 3 \xrightarrow[]{} 4 con valor 5
  • Camino de 1 a 5: 151 \xrightarrow[]{} 5 con valor 8
  • Camino de 1 a 1: camino trivial con valor 0

Además, podemos construir la arborescencia de unión de salida formada por los caminos de valor mínimo:

TikZ Graph

💡Nota

Al igual que en el caso del algoritmo de Ford-Moore-Bellman, la arborescencia de unión de salida formada por los caminos de valor mínimo no es necesariamente una arborescencia de salida de valor mínimo:

P(T)=p12+p13+p34+p15=2+3+2+8=15\begin{align*} P(T) = p_{12} + p_{13} + p_{34} + p_{15} = 2 + 3 + 2 + 8 = 15 \end{align*}

Sin embargo, si consideramos la arborescencia de salida:

TikZ Graph

P(T)=p12+p13+p34+p35=2+3+2+7=14\begin{align*} P(T) = p_{12} + p_{13} + p_{34} + p_{35} = 2 + 3 + 2 + 7 = 14 \end{align*}

💡Nota

Notar que, ambos algoritmos pueden ser usados indistintamente para redes con pesos no negativos (en caso de que algún peso fuera negativo, habría que usar el algoritmo de Ford-Moore-Bellman). No obstante, el algoritmo de Dijkstra es más eficiente en este caso, ya que su tiempo de ejecución es O(n2)O(n^2) frente a los O(nm)O(nm) del algoritmo de Ford-Moore-Bellman.

Esta diferencia de eficiencia se debe a que, el algoritmos de Dijkstra, recalcula en cada iteración las etiquetas d(i)d(i) únicamente para los vértices adyacentes al vértice vv seleccionado en dicha iteración, mientras que el algoritmo de Ford-Moore-Bellman recalcula las etiquetas d(i)d(i) para todos los vértices en cada iteración.

Transformaciones monótonas de redes orientadas

En general, los caminos de valor mínimo en una red orientada no se mantienen bajo transformaciones estrictamente crecientes de los pesos de los arcos.

💡Nota

Para estos casos, basta considerar funciones como logaritmos, exponenciales o algunas transformaciones lineales.

Transformación kxkx

No obstante, existe una transformación monótona que si permite relacionar los caminos de valor mínimo. Se define como:

f(x)=kx\begin{align*} f(x) = k \cdot x \end{align*}

Así, consideramos la transformación de una red orientada R=(V,A,p)R = (V, A, p) en otra red orientada R=(V,A,p)R' = (V, A, p') y, por tanto, p(e)=kp(e)p'(e) = k \cdot p(e) para cualquier eAe \in A y kR{0}k \in \mathbb{R} \setminus \{0\}.

De esta forma, sea π\pi un camino cualquiera en RR, entonces:

p(π)=eπp(e)=eπkp(e)=keπp(e)=kp(π)\begin{align*} p'(\pi) = \displaystyle \sum_{e \in \pi} p'(e) = \displaystyle \sum_{e \in \pi} k \cdot p(e) = k \cdot \displaystyle \sum_{e \in \pi} p(e) = k \cdot p(\pi) \end{align*}

Entonces, se dan las siguientes propiedades:

  • Si k>0k > 0 el camino de valor mínimo en RR es el mismo que en RR'
  • Si k<0k < 0 el camino de valor mínimo en RR' es el camino de valor máximo en RR

💡Nota

Notar que, a partir de esta transformación, podemos obtener los caminos de valor máximo en una red orientada RR a partir de los caminos de valor mínimo en la red transformada RR' con k=1k = -1.

Camino de menor longitud

Este problema se puede reinterpretar como encontrar el camino de valor mínimo en una red orientada donde los pesos de los arcos valen 1, es decir, p(e)=1p(e) = 1 para cualquier eAe \in A.

A través de esta interpretación, podemos aplicar los algoritmos vistos anteriormente para encontrar caminos de menor longitud en una red orientada.

✏️Ejemplo

Dada la siguiente red orientada con raíz de salida 1, aplicar el algoritmo de Dijkstra para obtener los caminos de menor longitud desde la raíz de salida al resto de vértices.

TikZ Graph

Aplicando los pasos del algoritmo, obtenemos:

  1. Sea r=1r = 1 entonces tenemos V={2,3,4,5}V' = \{2, 3, 4, 5\} y Γ+(1)={2}\Gamma^+(1) = \{2\}, por tanto:
12345d(i)01I(i)01000\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 1 & \infty & \infty & \infty \\ I(i) & 0 & 1 & 0 & 0 & 0 \\ \end{array}
  1. Veamos cual es el vértice vVv \in V' con d(v)d(v) mínimo, es decir:
d(v)=min{d(2),d(3),d(4),d(5)}=min{1,,,}=1    v=2\begin{align*} d(v) = \min\{d(2), d(3), d(4), d(5)\} = \min\{1, \infty, \infty, \infty\} = 1 \implies v = 2 \end{align*}

Actualizamos V={3,4,5}V' = \{3, 4, 5\} y tenemos Γ+(2)={1,3,4}\Gamma^+(2) = \{1,3,4\}, entonces:

Γ+(2)V={3,4}    {t3=d(2)+p23=1+1=2<d(3)=t4=d(2)+p24=1+1=2<d(4)=\begin{align*} \Gamma^{ + }(2) \cap V' = \{3,4\} \implies \left\{ \begin{array}{l} t_3 = d(2) + p_{23} = 1 + 1 = 2 < d(3) = \infty\\ t_4 = d(2) + p_{24} = 1 + 1 = 2 < d(4) = \infty \end{array} \right. \end{align*}

Por tanto, actualizamos esas entradas de la tabla:

12345d(i)0122I(i)01220\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 1 & \textcolor{red}{2} & \textcolor{red}{2} & \infty \\ I(i) & 0 & 1 & \textcolor{red}{2} & \textcolor{red}{2} & 0 \\ \end{array}

Ahora, como VV' \neq \emptyset, repetimos el paso 2. 3. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(3),d(4),d(5)}=min{2,2,}=2    v=3\begin{align*} d(v) = \min\{d(3), d(4), d(5)\} = \min\{2, 2, \infty\} = 2 \implies v = 3 \end{align*}

Actualizamos V={4,5}V' = \{4, 5\} y tenemos Γ+(3)={2,4,5}\Gamma^+(3) = \{2,4,5\}, entonces:

Γ+(3)V={4,5}    {t4=d(3)+p34=2+1=3d(4)=2t5=d(3)+p35=2+1=3<d(5)=\begin{align*} \Gamma^{ + }(3) \cap V' = \{4,5\} \implies \left\{ \begin{array}{l} t_4 = d(3) + p_{34} = 2 + 1 = 3 \not< d(4) = 2\\ t_5 = d(3) + p_{35} = 2 + 1 = 3 < d(5) = \infty \end{array} \right. \end{align*}

Por tanto, actualizamos esa entrada de la tabla:

12345d(i)01223I(i)01223\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 1 & 2 & 2 & \textcolor{red}{3} \\ I(i) & 0 & 1 & 2 & 2 & \textcolor{red}{3} \\ \end{array}

Ahora, como VV' \neq \emptyset, repetimos el paso 2. 4. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(4),d(5)}=min{2,3}=2    v=4\begin{align*} d(v) = \min\{d(4), d(5)\} = \min\{2, 3\} = 2 \implies v = 4 \end{align*}

Actualizamos V={5}V' = \{5\} y tenemos Γ+(4)={5}\Gamma^+(4) = \{5\}, entonces:

Γ+(4)V={5}    t5=d(4)+p45=2+1=3d(5)=3\begin{align*} \Gamma^{ + }(4) \cap V' = \{5\} \implies t_5 = d(4) + p_{45} = 2 + 1 = 3 \not< d(5) = 3 \end{align*}

Por tanto, no actualizamos nada. Ahora, como VV' \neq \emptyset, repetimos el paso 2. 5. El vértice vVv \in V' con d(v)d(v) mínimo es:

d(v)=min{d(5)}=3    v=5\begin{align*} d(v) = \min\{d(5)\} = 3 \implies v = 5 \end{align*}

Actualizamos V=V' = \emptyset y tenemos Γ+(5)={4}\Gamma^+(5) = \{4\}, entonces:

Γ+(5)V=\begin{align*} \Gamma^{ + }(5) \cap V' = \emptyset \end{align*}

Por tanto, no actualizamos nada. Ahora, como V=V' = \emptyset, el algoritmo termina.

El resultado final del algoritmo es:

12345d(i)01223I(i)01223\begin{array}{c|ccccc} & 1 & 2 & 3 & 4 & 5 \\ \hline d(i) & 0 & 1 & 2 & 2 & 3 \\ I(i) & 0 & 1 & 2 & 2 & 3 \\ \end{array}

Así, los caminos de menor longitud desde la raíz de salida 1 al resto de vértices son:

  • Camino de 1 a 2: 121 \xrightarrow[]{} 2 con longitud 1
  • Camino de 1 a 3: 1231 \xrightarrow[]{} 2 \xrightarrow[]{} 3 con longitud 2
  • Camino de 1 a 4: 1241 \xrightarrow[]{} 2 \xrightarrow[]{} 4 con longitud 2
  • Camino de 1 a 5: 12351 \xrightarrow[]{} 2 \xrightarrow[]{} 3 \xrightarrow[]{} 5 con longitud 3
  • Camino de 1 a 1: camino trivial con longitud 0

Además, podemos construir la arborescencia de unión de salida formada por los caminos de menor longitud:

TikZ Graph

Caminos de menor valor entre todos los pares de vértices

Sea R=(V,A,p)R = (V, A, p) red orientada, se pretende calcular todos los caminos de menor valor entre todos los pares de vértices i,jVi, j \in V. Aunque una opción sería aplicar el algoritmo de Dijkstra nn veces, existe un algoritmo más eficiente conocido como el algoritmo de Floyd-Warshall.

Teorema 3.5. Algoritmo de Floyd-Warshall

Sea R=(V,A,p)R = (V, A, p) red orientada fuertemente conexa sin circuitos de valor negativo con o(G)=no(G) = n y p(e)Rp(e) \in \mathbb{R} para cualquier eAe \in A y sean:

D0(i,j)={0 si i=jpij si (i,j)A en otro casoyI0(i,j)={i si ij en otro caso\begin{align*} D_0(i,j) = \left\{ \begin{array}{ll} 0 & \text{ si } i = j\\ p_{ij} & \text{ si } (i,j) \in A\\ \infty & \text{ en otro caso} \end{array} \right. \qquad \text{y} \qquad I_0(i,j) = \left\{ \begin{array}{ll} i & \text{ si } i \neq j\\ - & \text{ en otro caso} \end{array} \right. \end{align*}

Y para cada k{1,,n}k \in \{1, \dots, n\} se definen:

Dk(i,j)=min{Dk1(i,j),Dk1(i,k)+Dk1(k,j)}Ik(i,j)={Ik1(i,j) si Dk(i,j)=Dk1(i,j)Ik1(k,j) si Dk(i,j)Dk1(i,j)\begin{align*} D_k(i, j) & = \min \left\{D_{k - 1}(i, j), D_{k - 1}(i, k) + D_{k - 1}(k, j)\right\}\\[2ex] I_k(i, j) & = \left\{ \begin{array}{ll} I_{k - 1}(i, j) & \text{ si } D_k(i, j) = D_{k - 1}(i, j)\\ I_{k - 1}(k, j) & \text{ si } D_k(i, j) \neq D_{k - 1}(i, j) \end{array} \right. \end{align*}

Se verifica que:

  • Dk(i,i)=0D_k(i, i) = 0 representa el valor de un camino de menor valor de ii a ii tal que sus vértices intermedios pertenecen a {1,,k}\{1, \dots, k\}
  • Si iji \neq j y πij\exists \pi_{ij} con posibles vértices intermedios en {1,,k}\{1, \dots, k\} entonces Dk(i,j)D_k(i, j) \neq \emptyset representa el valor de un camino de menor valor de ii a jj tal que sus vértices intermedios pertenecen a {1,,k}\{1, \dots, k\}. Además, Ik(i,j)I_k(i, j) representa el penúltimo vértice de dicho camino. Si no existe tal camino, entonces Dk(i,j)=D_k(i, j) = \infty y Ik(i,j)=I_k(i, j) = -.

📐Demostración (no entra)

La demostración se realiza por inducción sobre kk. Ver apuntes de la asignatura para un desarrollo completo.

Corolario 3.6

Sea R=(V,A,p)R = (V, A, p) red orientada fuertemente conexa sin circuitos de valor negativo con o(G)=no(G) = n y p(e)Rp(e) \in \mathbb{R} para cualquier eAe \in A. Entonces, para cualquier i,jVi, j \in V, Dn(i,j)D_n(i, j) representa el valor de un camino de menor valor de ii a jj y In(i,j)I_n(i, j) representa el penúltimo vértice de dicho camino. Si no existe tal camino, entonces Dn(i,j)=D_n(i, j) = \infty y In(i,j)=I_n(i, j) = -.

📐Demostración (no entra)

Al ser una red fuertemente conexa y sin circuitos, se puede aplicar el Teorema 3.5 para k=nk = n y así:

  • Si i=ji = j entonces Dn(i,i)=0D_n(i, i) = 0 que coincide con el valor del camino trivial de ii a ii, que es el camino de menor valor entre ambos vértices.
  • Si iji \neq j, como la red es fuertemente conexa, existe al menos un camino de ii a jj con posibles vértices intermedios en {1,,n}\{1, \dots, n\}, por lo que Dn(i,j)D_n(i, j) \neq \emptyset representa el valor de un camino de menor valor de ii a jj con posibles vértices intermedios en {1,,n}\{1, \dots, n\}. Además, In(i,j)I_n(i, j) representa el penúltimo vértice de dicho camino.

Consecuencias del corolario 3.6

A partir del Corolario 3.6, se pueden extraer las siguientes consecuencias:

  • De InI_n se obtienen todos los vértices de un camino de menor valor entre ii y jj aplicando el Teorema 3.2 de forma recursiva hacia atrás.
  • De DnD_n se obtiene el valor del camino de menor valor entre ii y jj.
  • Los caminos de menor valor desde un vértice ii se obtienen de las filas ii-ésimas de las matrices DnD_n e InI_n.
  • La información proporcionada en las filas es equivalente a la obtenida en la tabla resultante del algoritmo de Ford-Moore-Bellman aplicado desde la raíz de salida ii.

Descripción del algoritmo de Floyd-Warshall

Sea R=(V,A,p)R = (V, A, p) red orientada fuertemente conexa con o(G)=no(G) = n y p(e)Rp(e) \in \mathbb{R} para cualquier eAe \in A. El algoritmo de Floyd-Warshall se describe a continuación:

  1. Definimos las matrices D0D_0 e I0I_0 como en el Teorema 3.5 y consideramos k=1k = 1
  2. Definimos los elementos de la matriz DkD_k como:
Dk(i,j)=min{Dk1(i,j),Dk1(i,k)+Dk1(k,j)}\begin{align*} D_k(i, j) = \min \left\{D_{k - 1}(i, j), D_{k - 1}(i, k) + D_{k - 1}(k, j)\right\} \end{align*}
  1. Obtenemos los elementos de la matriz IkI_k como:
Ik(i,j)={Ik1(i,j) si Dk(i,j)=Dk1(i,j)Ik1(k,j) si Dk(i,j)Dk1(i,j)\begin{align*} I_k(i, j) = \left\{ \begin{array}{ll} I_{k - 1}(i, j) & \text{ si } D_k(i, j) = D_{k - 1}(i, j)\\ I_{k - 1}(k, j) & \text{ si } D_k(i, j) \neq D_{k - 1}(i, j) \end{array} \right. \end{align*}
  1. Si k<nk < n entonces k=k+1k = k + 1 y volvemos al paso 2. En otro caso, el algoritmo termina con las matrices DnD_n e InI_n.

✏️Ejemplo

Dada la siguiente red orientada, aplicar el algoritmo de Floyd-Warshall para obtener los caminos de menor valor entre todos los pares de vértices.

TikZ Graph

Aplicamos los pasos del algoritmo:

  1. Definimos las matrices D0D_0 e I0I_0:
D0=(0240302510) y I0=(111222333444)\begin{align*} D_0 = \begin{pmatrix} 0 & \infty & - 2 & \infty \\ 4 & 0 & 3 & \infty \\ \infty & \infty & 0 & 2 \\ 5 & - 1 & \infty & 0 \end{pmatrix} \qquad \text{ y } \qquad I_0 = \begin{pmatrix} - & 1 & 1 & 1 \\ 2 & - & 2 & 2 \\ 3 & 3 & - & 3 \\ 4 & 4 & 4 & - \end{pmatrix} \end{align*}
  1. Para k=1k = 1, calculamos D1D_1 e I1I_1, es decir, nos fijamos en la primera fila y primera columna y comprobamos si existe algún camino de menor valor que pase por el vértice 1. Podemos ver que:
D1(2,3)=min{D0(2,3),D0(2,1)+D0(1,3)}=min{3,4+(2)}=2D1(4,3)=min{D0(4,3),D0(4,1)+D0(1,3)}=min{,5+(2)}=3\begin{align*} D_1(2, 3) & = \min\{D_0(2, 3), D_0(2, 1) + D_0(1, 3)\} = \min\{3, 4 + (-2)\} = 2\\ D_1(4, 3) & = \min\{D_0(4, 3), D_0(4, 1) + D_0(1, 3)\} = \min\{\infty, 5 + (-2)\} = 3 \end{align*}

Por tanto, las matrices quedan como:

D1=(02402025130) y I1=(111212333441)\begin{align*} D_1 = \begin{pmatrix} 0 & \infty & - 2 & \infty \\ 4 & 0 & \textcolor{red}{2} & \infty \\ \infty & \infty & 0 & 2 \\ 5 & - 1 & \textcolor{red}{3} & 0 \end{pmatrix} \qquad \text{ y } \qquad I_1 = \begin{pmatrix} - & 1 & 1 & 1 \\ 2 & - & \textcolor{red}{1} & 2 \\ 3 & 3 & - & 3 \\ 4 & 4 & \textcolor{red}{1} & - \end{pmatrix} \end{align*}

Como k<nk < n, pasamos a k=2k = 2. 3. Para k=2k = 2, calculamos D2D_2 e I2I_2. Podemos ver que:

D2(4,1)=min{D1(4,1),D1(4,2)+D1(2,1)}=min{5,1+4}=3D2(4,3)=min{D1(4,3),D1(4,2)+D1(2,3)}=min{3,1+2}=1\begin{align*} D_2(4, 1) & = \min\{D_1(4, 1), D_1(4, 2) + D_1(2, 1)\} = \min\{5, -1 + 4\} = 3\\ D_2(4, 3) & = \min\{D_1(4, 3), D_1(4, 2) + D_1(2, 3)\} = \min\{3, -1 + 2\} = 1 \end{align*}

Por tanto, las matrices quedan como:

D2=(02402023110) y I2=(111212333241)\begin{align*} D_2 = \begin{pmatrix} 0 & \infty & - 2 & \infty \\ 4 & 0 & 2 & \infty \\ \infty & \infty & 0 & 2 \\ \textcolor{red}{3} & - 1 & \textcolor{red}{1} & 0 \end{pmatrix} \qquad \text{ y } \qquad I_2 = \begin{pmatrix} - & 1 & 1 & 1 \\ 2 & - & 1 & 2 \\ 3 & 3 & - & 3 \\ \textcolor{red}{2} & 4 & \textcolor{blue}{1} & - \end{pmatrix} \end{align*}

Como k<nk < n, pasamos a k=3k = 3. 4. Para k=3k = 3, calculamos D3D_3 e I3I_3. Podemos ver que:

D3(1,4)=min{D2(1,4),D2(1,3)+D2(3,4)}=min{,2+2}=0D3(2,4)=min{D2(2,4),D2(2,3)+D2(3,4)}=min{,2+2}=4\begin{align*} D_3(1, 4) & = \min\{D_2(1, 4), D_2(1, 3) + D_2(3, 4)\} = \min\{\infty, -2 + 2\} = 0\\ D_3(2, 4) & = \min\{D_2(2, 4), D_2(2, 3) + D_2(3, 4)\} = \min\{\infty, 2 + 2\} = 4 \end{align*}

Por tanto, las matrices quedan como:

D3=(0204024023110) y I3=(113213333241)\begin{align*} D_3 = \begin{pmatrix} 0 & \infty & - 2 & \textcolor{red}{0} \\ 4 & 0 & 2 & \textcolor{red}{4} \\ \infty & \infty & 0 & 2 \\ 3 & - 1 & 1 & 0 \end{pmatrix} \qquad \text{ y } \qquad I_3 = \begin{pmatrix} - & 1 & 1 & \textcolor{red}{3} \\ 2 & - & 1 & \textcolor{red}{3} \\ 3 & 3 & - & 3 \\ 2 & 4 & 1 & - \end{pmatrix} \end{align*}

Como k<nk < n, pasamos a k=4k = 4. 5. Para k=4k = 4, calculamos D4D_4 e I4I_4. Podemos ver que:

D4(3,1)=min{D3(3,1),D3(3,4)+D3(4,1)}=min{,2+3}=5D4(1,2)=min{D3(1,2),D3(1,4)+D3(4,2)}=min{,0+(1)}=1D4(3,2)=min{D3(3,2),D3(3,4)+D3(4,2)}=min{,2+(1)}=1\begin{align*} D_4(3, 1) & = \min\{D_3(3, 1), D_3(3, 4) + D_3(4, 1)\} = \min\{\infty, 2 + 3\} = 5\\ D_4(1, 2) & = \min\{D_3(1, 2), D_3(1, 4) + D_3(4, 2)\} = \min\{\infty, 0 + (-1)\} = -1\\ D_4(3, 2) & = \min\{D_3(3, 2), D_3(3, 4) + D_3(4, 2)\} = \min\{\infty, 2 + (-1)\} = 1 \end{align*}

Por tanto, las matrices quedan como:

D4=(0120402451023110) y I4=(413213243241)\begin{align*} D_4 = \begin{pmatrix} 0 & \textcolor{red}{-1} & - 2 & 0 \\ 4 & 0 & 2 & 4 \\ \textcolor{red}{5} & \textcolor{red}{1} & 0 & 2 \\ 3 & - 1 & 1 & 0 \end{pmatrix} \qquad \text{ y } \qquad I_4 = \begin{pmatrix} - & \textcolor{blue}{4} & 1 & 3 \\ 2 & - & 1 & 3 \\ \textcolor{red}{2} & \textcolor{blue}{4} & - & 3 \\ 2 & 4 & 1 & - \end{pmatrix} \end{align*}

Como k=nk = n, el algoritmo termina con las matrices D4D_4 e I4I_4.

Así, los caminos de menor valor entre todos los pares de vértices son:

  • Camino de 1 a 2: 13421 \xrightarrow[]{} 3 \xrightarrow[]{} 4 \xrightarrow[]{} 2 con valor 1-1
  • Camino de 1 a 3: 131 \xrightarrow[]{} 3 con valor 2-2
  • Camino de 1 a 4: 1341 \xrightarrow[]{} 3 \xrightarrow[]{} 4 con valor 00
  • Camino de 2 a 1: 212 \xrightarrow[]{} 1 con valor 44
  • Camino de 2 a 3: 2132 \xrightarrow[]{} 1 \xrightarrow[]{} 3 con valor 22
  • Camino de 2 a 4: 21342 \xrightarrow[]{} 1 \xrightarrow[]{} 3 \xrightarrow[]{} 4 con valor 44
  • Camino de 3 a 1: 34213 \xrightarrow[]{} 4 \xrightarrow[]{} 2 \xrightarrow[]{} 1 con valor 55
  • Camino de 3 a 2: 3423 \xrightarrow[]{} 4 \xrightarrow[]{} 2 con valor 11
  • Camino de 3 a 4: 343 \xrightarrow[]{} 4 con valor 22
  • Camino de 4 a 1: 4214 \xrightarrow[]{} 2 \xrightarrow[]{} 1 con valor 33
  • Camino de 4 a 2: 424 \xrightarrow[]{} 2 con valor 1-1
  • Camino de 4 a 3: 42134 \xrightarrow[]{} 2 \xrightarrow[]{} 1 \xrightarrow[]{} 3 con valor 11
  • Camino de ii a ii: camino trivial con valor 00 para cualquier i{1,2,3,4}i \in \{1, 2, 3, 4\}

Cadena de menor valor/longitud

Cadena de menor valor

Valor de una cadena. Definición

Sea R=(V,A,p)R = (V, A, p) red no orientada conexa, dados i,jVi, j \in V y una cadena de ii a jj definida como:

ipi,i1i1pi1,i2i2pi2,i3pik1,ikikpik,jj\begin{align*} i \xleftrightarrow{p_{i, i_1}} i_1 \xleftrightarrow{p_{i_1, i_2}} i_2 \xleftrightarrow{p_{i_2, i_3}} \dots \xleftrightarrow{p_{i_{k-1}, i_k}} i_k \xleftrightarrow{p_{i_k, j}} j \end{align*}

El valor de la cadena se define como:

m=0kpim,im+1=pi,i1+pi1,i2+pi2,i3++pik1,ik+pik,j\begin{align*} \sum_{m = 0}^{k} p_{i_m, i_{m + 1}} = p_{i, i_1} + p_{i_1, i_2} + p_{i_2, i_3} + \dots + p_{i_{k-1}, i_k} + p_{i_k, j}\\ \end{align*}

Cadena de menor valor. Definición

Sea R=(V,A,p)R = (V, A, p) red no orientada conexa, dados i,jVi, j \in V, una cadena de menor valor de ii a jj es aquella cadena de ii a jj cuyo valor es mínimo entre todas las cadenas de ii a jj.

💡Nota

Notar que, en caso de tener un grafo no dirigido, es posible transformar dicho grafo en una red orientada duplicando cada arista en dos arcos opuestos con el mismo valor. De esta forma, se pueden demostrar resultados análogos a los vistos en redes orientadas y aplicar métodos como los algoritmos de Dijkstra o Floyd-Warshall para encontrar cadenas de menor valor entre vértices.

✏️Ejemplo

Sea la siguiente red no orientada, encontrar las cadenas de menor valor entre todos los vértices.

TikZ Graph

Transformamos la red no orientada en una red orientada:

TikZ Graph

Y ahora, aplicamos el algoritmo de Floyd-Warshall:

  1. Definimos las matrices D0D_0 e I0I_0:
D0=(042409290) y I0=(112233)\begin{align*} D_0 = \begin{pmatrix} 0 & 4 & 2 \\ 4 & 0 & 9 \\ 2 & 9 & 0 \end{pmatrix} \qquad \text{ y } \qquad I_0 = \begin{pmatrix} - & 1 & 1 \\ 2 & - & 2 \\ 3 & 3 & - \end{pmatrix} \end{align*}
  1. Para k=1k = 1 calculamos D1D_1 e I1I_1. Tenemos que:
D1(2,3)=min{D0(2,3),D0(2,1)+D0(1,3)}=min{9,4+2}=6D1(3,2)=min{D0(3,2),D0(3,1)+D0(1,2)}=min{9,2+4}=6\begin{align*} D_1(2, 3) & = \min\{D_0(2, 3), D_0(2, 1) + D_0(1, 3)\} = \min\{9, 4 + 2\} = 6\\ D_1(3, 2) & = \min\{D_0(3, 2), D_0(3, 1) + D_0(1, 2)\} = \min\{9, 2 + 4\} = 6 \end{align*}

Por tanto, las matrices quedan como:

D1=(042406260) y I1=(112131)\begin{align*} D_1 = \begin{pmatrix} 0 & 4 & 2 \\ 4 & 0 & \textcolor{red}{6} \\ 2 & \textcolor{red}{6} & 0 \end{pmatrix} \qquad \text{ y } \qquad I_1 = \begin{pmatrix} - & 1 & 1 \\ 2 & - & \textcolor{red}{1} \\ 3 & \textcolor{red}{1} & - \end{pmatrix} \end{align*}

Como k<nk < n, pasamos a k=2k = 2. 3. Para k=2k = 2 calculamos D2D_2 e I2I_2. No se actualiza ningún valor, por lo que las matrices quedan igual. Como k<nk < n, pasamos a k=3k = 3. 4. Para k=3k = 3 calculamos D3D_3 e I3I_3. No se actualiza ningún valor, por lo que las matrices quedan igual. Como k=nk = n, el algoritmo termina con las matrices D3D_3 e I3I_3.

Así, las cadenas de menor valor entre todos los pares de vértices son:

  • Cadena de 1 a 2: 121 \xleftrightarrow[]{} 2 con valor 44
  • Cadena de 1 a 3: 131 \xleftrightarrow[]{} 3 con valor 22
  • Cadena de 2 a 1: 212 \xleftrightarrow[]{} 1 con valor 44
  • Cadena de 2 a 3: 2132 \xleftrightarrow[]{} 1 \xleftrightarrow[]{} 3 con valor 66
  • Cadena de 3 a 1: 313 \xleftrightarrow[]{} 1 con valor 22
  • Cadena de 3 a 2: 3123 \xleftrightarrow[]{} 1 \xleftrightarrow[]{} 2 con valor 66
  • Cadena de ii a ii: cadena trivial con valor 00 para cualquier i{1,2,3}i \in \{1, 2, 3\}

Cadena de menor longitud

La idea de cadena de menor longitud es análoga a la de cadena de menor valor, pero en este caso, el peso de cada arista se considera como 1. Por tanto, el valor de una cadena coincide con su longitud, y la cadena de menor longitud entre dos vértices es aquella que tiene el menor número de aristas entre ellos.