10.08.2015 Views

Algoritmo de Floyd- Warshall

Algoritmo de Floyd- Warshall

Algoritmo de Floyd- Warshall

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ObjetivoDado un grafo pon<strong>de</strong>rado, queremos obtener elcamino <strong>de</strong> distancia mínima entre dos vérticescualesquiera.01 2 3 40315360127 443284


ObjetivoDado un grafo pon<strong>de</strong>rado, queremos obtener elcamino <strong>de</strong> distancia mínima entre dos vérticescualesquiera.01 2 3 403153601287 443284


ObjetivoDado un grafo pon<strong>de</strong>rado, queremos obtener elcamino <strong>de</strong> distancia mínima entre dos vérticescualesquiera.01 2 3 40315360128 147 443284


ObjetivoDado un grafo pon<strong>de</strong>rado, queremos obtener elcamino <strong>de</strong> distancia mínima entre dos vérticescualesquiera.01 2 3 40315360120 3 7 8 143 0 9 5 117 9 0 4 87 4438 5 4 0 628414 11 8 6 0


Representación <strong>de</strong> un grafoSólo almacenamos los elementos por <strong>de</strong>bajo <strong>de</strong>la diagonal principal.01 2 3 4012340 3 7 +∞ +∞3 0 +∞ 5 +∞7 +∞ 0 4 8+∞ 5 4 0 6+∞ +∞ 8 6 0[[3],[7,inf],[inf,5,4],[inf,inf,8,6]]1 2 3 4


Cálculo <strong>de</strong>l camino mínimoA n(i, j) = Longitud <strong>de</strong>l camino mínimo que hay <strong>de</strong>s<strong>de</strong> laciudad i hasta la ciudad j, suponiendo que po<strong>de</strong>mospasar por cualquier ciudad intermedia.101 2 3 43500 3 7 8 1403613 0 9 5 117 4427 9 0 4 828348 5 4 0 614 11 8 6 0A nes lo que buscamos !


Cálculo <strong>de</strong>l camino mínimo¿Cómo calcular A ka partir <strong>de</strong> A k-1?iA k-1(i,j)jA k-1(i, k-1)k-1A k-1(k-1, j)


Cálculo <strong>de</strong>l camino mínimo¿Cómo calcular A ka partir <strong>de</strong> A k-1?iA k-1(i,j)jA k-1(i, k-1)k-1A k-1(k-1, j)


Cálculo <strong>de</strong>l camino mínimo¿Cómo calcular A ka partir <strong>de</strong> A k-1?iA k-1(i,j)jk-1Si el nuevo camino mínimo no pasa por el nodok-1A k(i,j)=A k-1(i,j)


Cálculo <strong>de</strong>l camino mínimo¿Cómo calcular A ka partir <strong>de</strong> A k-1?ijA k-1(i, k-1)k-1A k-1(k-1, j)Si el nuevo camino mínimo pasa por el nodo k-1A k(i,j)=A k-1(i,k-1) + A k-1(k-1,j)


Cálculo <strong>de</strong>l camino mínimo¿Cómo calcular A ka partir <strong>de</strong> A k-1?iA k-1(i,j)jA k-1(i, k-1)k-1A k-1(k-1, j)La opción que más nos conviene:A k(i,j) = min { A k-1(i,j), A k-1(i,k-1)+A k-1(k-1,j) }


Resumen<strong>de</strong>f caminosMinimos (m):MAnterior = mn = m.numeroCiuda<strong>de</strong>s()for k in range(n):MSiguiente = ..calcular a partir <strong>de</strong> MAnterior..MAnterior = MSiguientereturn MSiguienteA k(i,j) = min { A k-1(i,j), A k-1(i,k-1)+A k-1(k-1,j) }


Solución<strong>de</strong>f caminosMinimos (m):MAnterior = mn = m.numeroCiuda<strong>de</strong>s()for k in range(n):MSiguiente = MatrizCiuda<strong>de</strong>s(n)for i in range(1,n):for j in range(i):x = MAnterior.elemento(i,j)y = MAnterior.elemento(i,k-1) + MAnterior.elemento(k-1,j)MSiguiente.cambiaElemento(i,j,min(x,y))MAnterior = MSiguientereturn MSiguienteA k(i,j) = min { A k-1(i,j), A k-1(i,k-1)+A k-1(k-1,j) }

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!