Algoritmo De Floyd

Páginas: 6 (1339 palabras) Publicado: 6 de noviembre de 2012
SEP SNEST DGEST

INSTITUTO TECNOLÓGICO DE TOLUCA

ING. SISTEMAS COMPURACIONALES

“MATEMATICAS PARA COMPUTADORA”

“DIAGRAMA DE FLOYD”

ALUMNO:
PEREZ ORTIZ CESAR ADRIAN

PROFESOR:
ELSA



METEPEC, EDO. DE MÉX. ABRIL DEL 2011.Algoritmo de Floyd-Warshall
En informática, el algoritmo de Floyd-Warshall, descrito en 1959 por Bernard Roy, es un algoritmo de análisis sobre grafos para encontrar el camino mínimo en grafos dirigidos ponderados. El algoritmo encuentra el camino entre todos los pares de vértices en una única ejecución. El algoritmo de Floyd-Warshall es un ejemplo de programación dinámica.
Algoritmo
El algoritmode Floyd-Warshall compara todos los posibles caminos a través del grafo entre cada par de vértices. El algoritmo es capaz de hacer esto con sólo V3 comparaciones (esto es notable considerando que puede haber hasta V2 aristas en el grafo, y que cada combinación de aristas se prueba). Lo hace mejorando paulatinamente una estimación del camino más corto entre dos vértices, hasta que se sabe que laestimación es óptima.
Sea un grafo G con conjunto de vértices V, numerados de 1 a N. Sea además una función caminoMinimo(i,j,k) que devuelve el camino mínimo de i a j usando únicamente los vértices de 1 a k como puntos intermedios en el camino. Ahora, dada esta función, nuestro objetivo es encontrar el camino mínimo desde cada i a cada j usando únicamente los vértices de 1 hasta k + 1.
Hay doscandidatos para este camino: un camino mínimo, que utiliza únicamente los vértices del conjunto (1...k); o bien existe un camino que va desde i hasta k + 1, después de k + 1 hasta j que es mejor. Sabemos que el camino óptimo de i a j que únicamente utiliza los vértices de 1 hasta k está definido por caminoMinimo(i,j,k), y está claro que si hubiera un camino mejor de i a k + 1 a j, la longitud deeste camino sería la concatenación del camino mínimo de i a k + 1 (utilizando vértices de (1...k)) y el camino mínimo de k + 1 a j (que también utiliza los vértices en (1...k)).

Por lo tanto, podemos definir caminoMinimo(i,j,k) de forma recursiva:

Esta fórmula es la base del algoritmo Floyd-Warshall. Funciona ejecutando primero caminoMinimo(i,j,1) para todos los pares (i,j), usándolos paradespués hallar caminoMinimo(i,j,2) para todos los pares (i,j)... Este proceso continúa hasta que k = n, y habremos encontrado el camino más corto para todos los pares de vértices (i,j) usando algún vértice intermedio.
Pseudocodigo
Convenientemente, cuando calculamos el k-esimo caso, se puede sobreescribir la información salvada en la computación k -1. Esto significa que el algoritmo usa memoriacuadrática. Hay que cuidar la inicialización de las condiciones:
1 /* Suponemos que la función pesoArista devuelve el coste del camino que va de i a j
2 (infinito si no existe).
3 También suponemos que n es el número de vértices y pesoArista(i,i) = 0
4 */
5
6 int camino[][];
7/* Una matriz bidimensional. En cada paso del algoritmo, camino[i][j] es el camino mínimo
8 de i hasta j usando valores intermedios de (1..k-1). Cada camino[i][j] es inicializado a
9 pesoArista(i,j)
10 */
11
12 procedimiento FloydWarshall ()
13 para k: = 0 hasta n − 1
14para todo (i,j) en (0..n − 1)
15 camino[i][j] = mín ( camino[i][j], camino[i][k]+camino[k][j]);
Código en C++
// Declaraciones en el archivo .h
int cn; //cantidad de nodos
vector< vector<int> > ady; //matriz de adyacencia

// Devuelve una matriz con las distancias...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Algoritmo De Floyd
  • Algoritmo De Floyd
  • Algoritmo de floyd
  • Algoritmo de floyd
  • Algoritmo de Floyd 2
  • Algoritmo Floyd Warshall
  • Algoritmo de floyd
  • Algoritmo De Floyd Warshall

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS