Está en la página 1de 14

Grafo de warshall

Esteban Seguro Varela

Universidad libre
Risaralda - Pereira
2018
Grafo de Warshall

Esteban Seguro Varela

Profesor : Carlos Alberto Ocampo Sepulveda

Universidad libre pereira


Risarlda-Pereira
2018
Tabla de contenido

Introducción..................................................................................................................................... 4
Antecedentes del algoritmo ........................................................................................................ 5
Autores .............................................................................................................................................. 5
Stephen Warshall ....................................................................................................................... 5
Vida temprana ......................................................................................................................... 5
Empleo ...................................................................................................................................... 6
Bernard Roy ................................................................................................................................. 6
Algoritmo de warshall ............................................................................................................... 6
CARACTERÍSTICAS DEL ALGORITMO DE WARSHALL ................................................. 6
CÓMO FUNCIONA ...................................................................................................................... 7
Matriz de Caminos ..................................................................................................................... 7
ALGORITMO ................................................................................................................................ 8
WARSHALL MÁS EFICIENTE .................................................................................................. 8
Pseudo-codigo ........................................................................................................................ 9
ALGORITMO DE WARSHALL – PARA LA CERRADURA TRANSITIVA ...................... 10
Teorema: ..................................................................................................................................... 10
Código en c++ ....................................................................................................................... 10
Análisis ....................................................................................................................................... 13
Reseña de aplicación del algoritmo (Para que se usa) .................................................. 13
Bibliografia ..................................................................................................................................... 14
Introducción
El siguiente trabajo explicara el grafo de warshall buscando complementar los
conceptos y explicaciones , conformándolo de tal manera que sea una compilación
de todos aquellos temas , sacando las caracterisitcas importantes y resaltantes;
desde la historia de este, hacia el funcionamiento principal y su paso a paso, este
trabajo va dirigido a la explicación y profundización del paso a paso y las
aplicaciones que tiene este grafo con sus ejemplos
Antecedentes del algoritmo
El algoritmo de 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.
Hay una anécdota interesante sobre su prueba de que el algoritmo de cierre
transitivo , ahora conocido como algoritmo de Warshall , es correcto. Él y un colega
de Operaciones Técnicas apostaron una botella de ron a quién primero podría
determinar si este algoritmo siempre funciona. A Warshall se le ocurrió su prueba
de la noche a la mañana, ganando la apuesta y el ron , que compartió con el
perdedor de la apuesta. Como a Warshall no le gustaba sentarse en un escritorio,
hizo gran parte de su trabajo creativo en lugares poco convencionales, como en
un velero en el Océano Índico o en un huerto de limoneros griego. .

Autores
Stephen Warshall

Stephen Warshall (15 noviembre 1935 a 11 diciembre 2006) fue


un estadounidense experto en informática . Durante su carrera, Warshall llevó a
cabo investigación y desarrollo en sistemas operativos , diseño de
compiladores , diseño de idiomas e investigación de operaciones . Warshall murió
el 11 de diciembre de 2006 de cáncer en su casa de Gloucester,
Massachusetts . Le sobreviven su esposa, Sarah Dunlap, y sus dos hijos, Andrew
D. Warshall y Sophia VZ Warshall.

Vida temprana
Warshall nació en la ciudad de Nueva York y fue a una escuela
pública en Brooklyn . Se graduó de la escuela preparatoria AB Davis en Mount
Vernon, Nueva York y asistió a la Universidad de Harvard , donde recibió
una licenciatura en matemáticas en 1956. Nunca recibió un título avanzado, ya que
en ese momento no había programas disponibles en sus áreas de interés. Sin
embargo, tomó cursos de posgrado en varias universidades diferentes y contribuyó
al desarrollo de la informática y la ingeniería de software . En el año académico
1971–1972, dio una conferencia sobre ingeniería de
software en francés.universidades
Empleo
Después de graduarse de Harvard, Warshall trabajó en ORO (Oficina de
Investigación de Operaciones), un programa establecido por Johns Hopkins para
hacer investigación y desarrollo para el Ejército de los Estados Unidos . En 1958,
dejó ORO para ocupar un puesto en una empresa llamada Operaciones Técnicas,
donde ayudó a construir un laboratorio de investigación y desarrollo para proyectos
de software militar. En 1961, dejó las Operaciones Técnicas para
fundar Massachusetts Computer Associates . Más tarde, esta compañía se convirtió
en parte de Applied Data Research (ADR). Después de la fusión, Warshall formó
parte de la junta directiva de ADR y administró una variedad de proyectos y
organizaciones. Se retiró de ADR en 1982 y enseñó una clase semanal de hebreo
bíblico en el Templo Ahavat Achim en Gloucester, Massachusetts.

Bernard Roy

(nacido en 1934), es profesor emérito de la Universidad Paris-Dauphine.

En 1974 se fundó el "Laboratoire d'Analyse et de modelización des Systèmes pour


l'aide à la Décision" ( LAMSADE ).

Ha trabajado en la teoría de grafos y el análisis de decisión multicriterio (MCDA),


habiendo creado el ELECTRE familia de métodos.

El nombre ELECTRE significa "Eliminación Et Choix Traduisant la Réalité"

Algoritmo de warshall
El algoritmo de Warshall es un ejemplo de algoritmo booleano. A partir de una tabla
inicial compuesta de 0`s (no hay correspondencia inicial en el grafo) y 1`s (hay una
correspondencia, llamase “flecha”, entre nodos), obtiene una nueva matriz
denominada “Matriz de Clausura Transitiva” en la que se muestran todas las
posibles uniones entre nodos, directa o indirectamente. Es decir, si de “A” a “B” no
hay una “flecha”, es posible que si haya de “A” a “C” y luego de “C” a “B”. Luego,
este resultado se vera volcado en la matriz final.

CARACTERÍSTICAS DEL ALGORITMO DE WARSHALL

Es una representación de algoritmo Booleano

Encuentra si posible un camino entre cada uno de los vértices de la gráfica dirigida.
Es decir no presenta las distancia entre los vértices Se basa en un concepto llamado
cerradura transitiva de la matriz de adyacencia El algoritmo de Warshall sirve para
encontrar la cerradura transitiva de una relación binaria en el conjunto A. La clausura
transitiva de una relación binaria es la relación binaria mas pequeña que siendo
transitiva contenga el conjunto de pares de la relación binaria original

CÓMO FUNCIONA

Existe una matriz inicial P0


Indica si hay o no camino DIRECTO de Vi a Vj
La matriz que le sigue P1
Indicaría si hay o no camino DIRECTO (Esto ya lo sabe P0)
O pasando por V0 (añade este vértice al análisis)
P2
Indicaría si hay camino DIRECTO
o pasando por V0 (Esto ya lo sabe P1)
O pasando por V1
P3
Indicaría si hay camino DIRECTO o pasando por V0, o V1 (Lo sabe P2)
O pasando por V2
Pk
Indicaría lo que ya sabe Pk-1
O pasando por Vk-1

Matriz de Caminos

Es una matriz cuadrada P, Que representa si hay o no camino Entre dos vértices
Vi y Vj
Definiciones básicas La matriz de adyacencia para G es una matriz A de
dimensión nxn, de elementos booleanos, donde A[i,j] es verdadero si y solo si
existe un arco que vaya del vértice i al j. Con frecuencia se exhibirán matrices
adyacencias con 1 para verdadero y 0 para falso. Figura: Matriz de adyacencia
Programación y diseño de algoritmos Algoritmo de Warshall Universidad
Politécnica de Victoria

ALGORITMO

Entre Vi y Vj puede haber caminoDirecto, cuando A[i][j] == 1, camino de long. 1 O


pasando por otros vértices Si solo analizamos pasar por un Vk extra Cuando A[i][k]
== 1 && A[k][j] == 1, Long. 2 Si Vk puede ser V1 o V2 o … Vn, realmente (A[i][1] &&
A[1][j]) || (A[i][2] && A[2][j]) || (A[i] [n] && A[3][n]) Que representa A * A, A2Nos indica
solo si hay un camino de long. 2 entre Vi y Vj La matriz de caminos indicara si hay
camino ya sea De long. 1 o de long. 2 o de long. 3 o de long. N, es decir:

WARSHALL MÁS EFICIENTE

El anterior algoritmo es poco eficiente, peor Cuando el grafo tiene muchos vértices
Warshall propuso otro algoritmo mas eficiente Calcular una secuencia de matrices
cuadradas De 0s(no hay camino) y 1s(hay camino) P0, P1, P2, P3… PN La
diferencia entre Pk y Pk-1 Se basa añadir un vértice Vk-1 al análisis Para saber y a
través de Vk-1 hay camino entre V1 y Vj
Pseudo-codigo

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 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
10 */
11
12 procedimiento FloydWarshall ()
13 para k: = 0 hasta n − 1
14
15 camino[i][j] = mín ( camino[i][j],
camino[i][k]+camino[k][j])
16
17 fin para
ALGORITMO DE WARSHALL – PARA LA CERRADURA TRANSITIVA
El siguiente Código Fuente es un ejemplo de la aplicación del Algoritmo de Warshall
en lenguaje C++ y que realicé hace algunos años en la Universidad.
El algoritmo de Warshall sirve para encontrar la Cerradura Transitiva de una relación
Binaria en un conjunto A.
Definición del Algoritmo.
Dado un conjunto , y una relacion binaria sobre , se definen la secuencia de
matices formadas por 0 y 1 y cuyos elementos se denotan
por construidas del siguiente modo:
 Sea la suma binaria.

 para se define a partir de

Teorema:

En las condiciones de la definición anterior, se tiene que:


/*
Algoritmo de Warshall para el cálculo de la Cerradura Transitiva de una relacion
Omar Alonso Alvarado Luna
Estructuras Discretas
Semestre 2007-2
Facultad de Ingenieria, UNAM
Código en c++
21 de Marzo de 2007
*/
#include
#include
#define SIZE 20
// FUNCION PARA UNA SUMA BINARIA
int sumabin(int sba, int sbb){
int res=0;
if(sba==1||sbb==1) res=1;
return res;
}
int main(){
/*
SE CREAN LAS MATRICES AUXILIARES Y LA MATRIZ TRIDIMENSIONAL
DONDE
EL PRIMER VALOR ES PARA M_k
EL SEGUNDO VALOR ES PARA EL NUMERO DE RENGLONES
EL TERCER VALOR ES PARA EL NUMERO DE COLUMNAS
*/
int Matriz[SIZE][SIZE][SIZE];
int temp_1[SIZE][SIZE];
int temp_2[SIZE][SIZE];
int a, i, j, k;
printf("Algoritmo de Warshall - Cerradura Transitiva\n\n");
//la cardinalidad del conjunto de relacion nos define una matriz cuadrada
//tambien nos define el numero de iteraciones ya que a partir de M_k+1
//la operacion nos dara la misma matriz hasta el infinito
printf("Introduzca la cardinalidad del Conjunto: ");
do{

scanf("%d", &a);
if(a20) printf("Introduzca un valor entre 1 y 20: ");
}while(a20);
printf("\n");
//ENTRADA DE DATOS DE LA MATRIZ DE RELACION M_0
for(i=0;i<a;i++){
for(j=0;j<a;j++){
printf("Valor de A_%d_%d: ", i+1, j+1);
do{
scanf("%d", &Matriz[0][i][j]);
if(Matriz[0][i][j]!=0&&Matriz[0][i][j]!=1) printf("Introduzca solo UNO o
CERO para Valor de A_%d_%d: ", i+1, j+1);
}while(Matriz[0][i][j]!=0&&Matriz[0][i][j]!=1);
}
}

//CALCULA M A LA INFINITO, SE DETIENE EN K= AL TAMAÑO YA QUE LA


SIGUIENTES
OPERACIONES
//NOS DARAN LA MISMA MATRIZ COMO SE DIJO ANTERIORMENTE
for(k=0;k<=a;k++){

//nos apoyamos de la matriz temp_2 para hacer la multiplicacion M_i_k * M_k_j


for(i=0;i<a;i++){
for(j=0;j<a;j++){
temp_2[i][j] = Matriz[k][i][j];

}
}
//CALCULAMOS LA MATRIZ K
for(i=0;i<a;i++){
for(j=0;j<a;j++){
//multiplicamos M_i_k * M_k_j
temp_1[i][j]=temp_2[i][k]*temp_2[k][j];
//Se hace la suma binaria para obterner la matriz k
Matriz[k+1][i][j]=sumabin(Matriz[k][i][j],temp_1[i][j]);
}
}
if(k!=a) printf("\n\nMatriz_%d\n", k);
else printf("\n\nMatriz_%d FINAL: \n\n", k);
//imprime la matriz_k
for(i=0;i<a;i++){

printf("\n");
for(j=0;j<a;j++){
printf(" %d ", Matriz[k][i][j]);

}
}

}//TERMINA CALCULA M A LA INFINITO

getch();
}

Análisis
Si utilizamos matrices booleanas, para encontrar todos
los de desde se necesita hacer operaciones binarias. Debido a
que empezamos con y computamos la secuencia de matrices
booleanas , , , , el número total de operaciones binarias es
de . Por lo tanto, la complejidad del algoritmo es y puede
ser resuelto por una máquina determinista de Turing en tiempo polinómico.

Reseña de aplicación del algoritmo (Para que se usa)

Obtiene la mejor ruta entre todo par de nodos


Trabaja con la matriz D inicializada con las distancias directas entre todo par de
nodos
La iteración se produce sobre nodos intermedios, es decir, para todo elemento de
la matriz se prueba si lo mejor para ir de i a j es a través de un nodo intermedio
elegido o como estaba anteriormente, y esto se prueba con todos los nodos de la
red .
Una vez probados todos los nodos de la red como nodos intermedios, la matriz
resultante da la mejor distancia entre todo par de nodos

Bibliografia
https://en.wikipedia.org/wiki/Stephen_Warshall
https://en.wikipedia.org/wiki/Bernard_Roy
http://alogorit-wars.blogspot.com/2013/04/resena-de-aplicacion-del-algoritmo-
para.html#links
http://alogorit-wars.blogspot.com/2013/04/el-algoritmo-de-warshall-encuentra-
la.html#links
https://verdadaurea.wordpress.com/2011/08/22/algoritmo-de-warshall-para-la-
cerradura-transitiva/
http://jcrd0730.wixsite.com/estr/single-post/2016/05/25/ALGORITMO-DE-
WARSHALL-1
http://dictionnaire.sensagent.leparisien.fr/Algoritmo%20de%20Floyd-Warshall/es-
es/
https://es.slideshare.net/whaleejaa/presentacin-algoritmo-warshall

También podría gustarte