Вы находитесь на странице: 1из 15

MATEMATICA DISCRETA Pgina 1

(Universidad del Per, DECANA DE AMRICA)





Curso : Matemtica discreta
Tema :
Alumnos : Cdigo:

Profesor :
Ciclo: 2013-II Aula: 105A Turno: mircoles 2pm-6pm





I. INDICE
MATEMATICA DISCRETA Pgina 2

Introduccin.3
Algoritmo..4
- Algoritmo de Warshall..4
- Algoritmo de Floyd-Warshall...4
Aplicaciones.5
Pseudocdigo.10




















MATEMATICA DISCRETA Pgina 3

II. INTRODUCCIN
UN POCO DE BIOGRAFA
Stephen Warshall (15 noviembre 1935 a 11
diciembre 2006) naci en New York City. Durante su
carrera, Warshall ha llevado a cabo la investigacin y el
desarrollo de sistemas operativos, diseo del compilador
del lenguaje, y la investigacin operativa. Warshall muri
el 11 de diciembre de 2006 de cncer en su casa de
Gloucester, Massachusetts. Le sobreviven su esposa,
Sarah Dunlap, y dos hijos, Andrew D. Warshall y Santa
VZ Warshall.
Warshall fue a la escuela pblica en Brooklyn. Se
gradu de A.B. Davis High School en Mount Vernon,
Nueva York y asisti a la Universidad de Harvard,
recibiendo una licenciatura en matemticas en 1956.
Nunca recibi un grado avanzado, ya que en ese
momento no estaban disponibles en los programas de
sus reas de inters. Sin embargo, tom cursos de
postgrado en varias universidades y ha contribuido al desarrollo de la informtica y la
ingeniera de software. En el ao acadmico 1971-1972, fue profesor en la Ingeniera
de Software en las universidades francesas.

ALGORITMO DE WARSHALL
El algoritmo de Warshall es un algoritmo de anlisis de grafos para que, de forma
eficiente y simultnea, encuentre los caminos ms cortos dentro de un grafo en el cual
las aristas tengan un costo (distancia entre nodo y nodo, duracin del viaje entre
nodos, etc.). Al ejecutar el algoritmo encontrara el camino menor o ms corto de entre
todos los pares de vrtices, pero no devuelve los detalles de los caminos en s. El
algoritmo es un ejemplo de la Programacin Dinmica y su variacin ms conocida fue
publicada en 1962 por Robert Floyd. Aunque es necesario comentar tambin que es
esencialmente el mismo algoritmo descubierto independientemente y antes publicado
por Bernard Roy en 1959 y por Stephen Warshall en 1962. De ah sus mltiples
pseudnimos: Algoritmo de Floyd, Algoritmo de Roy-Floyd, Algoritmo de Roy-Warshall,
Algoritmo WFI.

CMO FUNCIONA?
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 ver volcado en
la matriz final.



MATEMATICA DISCRETA Pgina 4

III. ALGORITMO

3.1. EL ALGORITMO DE WARSHALL

3.1.1. EXISTENCIA DE CAMINOS

El algoritmo de Warshall, llamado as en honor de Stephen Warshall,
quien describi el algoritmo en 1960, al algoritmo de Warshall se le
llama tambin de Roy-Warshall, ya que Bernard Roy describi este
algoritmo en 1959.

Es un mtodo eficiente para calcular el cierre transitivo de una relacin.
Hallar el cierre transitivo es equivalente a determinar cules de entre
los pares de vrtices en el grafo dirigido asociado estn conectados
por un camino. Veremos que el cierre transitivo se puede determinar
mediante el algoritmo de Warshall haciendo solo
2
2n operaciones con
bits

El algoritmo de Warshall se basa en la construccin sucesiva de
matrices booleanas, estas matrices son:
n
W W W ,...... ,
1 0
siendo A W =
0

donde A es la matriz de adyacencia, y | |
) (k
ij k
W W = , donde 1
) (
=
k
ij
W si
existe un d
j i
v a v , en caso contrario, si es 0 no existe un camino
entre
j i
v a v .
El algoritmo de Warshall se resume a:

( ) ( ) ( ) ( ) ( ) j K W K i W j i W j i W n K
V k
A W
K K K K
, , , , , 0
1 1 1
0

. v = s <
=
=


3.2. EL ALGORITMO DE FLOYD-WARSHALL
MATEMATICA DISCRETA Pgina 5


3.2.1. CAMINIMOS MINIMOS

Es un algoritmo de anlisis sobre grafos para encontrar el camino
mnimo en grafos dirigidos ponderados. El algoritmo encuentra el
camino entre dos vrtices en una nica ejecucin. El algoritmo de
FLOYD-WARSHALL es un ejemplo de programacin dinmica.

El algoritmo de FOLY-WARSHALL compara todos los posibles caminos
a travs del grafo entre cada par de vrtices. El algoritmo es capaz de
hacer esto con slo V
3
comparaciones.

Se ha un grafo G con un conjunto de vrtices V, enumerados de 1 a N,
se ha adems una funcin ( ) k j i oMinimo ca , , min que devuelve el
camino mnimo de i a j usando nicamente dos vrtices de 1 a k como
puntos intermedios en el camino. Ahora, dada esta funcin nuestro
objetivo es encontrar el camino mnimo desde cada i a cada j usando
nicamente los vrtices de 1 hasta k+1.

Hay dos candidatos para este camino: un camino mnimo, que utiliza
nicamente los vrtices del conjunto (1k); o bien existe un camino
que va desde i hasta k+1, y k+1 hasta j, que es mejor. Sabemos que el
camino ptimo de i a j que nicamente utiliza los vrtices de 1 hasta k
est definido por ( ) k j i oMinimo ca , , min , y est claro que si hubiera un
camino mejor de i a k+1 a j, la longitud de este camino sera la
concatenacin del camino mnimo de i a k+1 (utilizando vrtices de
(1.k)) y el camino mnimo de k+1 a j (que tambin utiliza los vrtices
en (1.k)).

Por lo tanto podemos definir ( ) k j i oMinimo ca , , min de forma recursiva:
( ) ( ) ( ) ( )
( ) ( ) j i pesoArista j i oMinimo ca
k j i oMinimo ca k j i oMinimo ca k j i oMinimo ca
, 0 , , min
1 , , min , 1 , , min min , , min
=
=

MATEMATICA DISCRETA Pgina 6

Esta frmula es la base del algoritmo de FLOYD-WARSHALL.
Funciona ejecutando primero:
( ) 1 , , min j i oMinimo ca Para todos los pares (i, j), usndolos para
despus.
Hallar ( ) 2 , , min j i oMinimo ca para todos los pares (i, j).. Este
proceso continua hasta k =n, y habremos encontrado el camino ms
corto para todos los pares de vrtice (i, j). Usando algn vrtice
intermedio.

IV. APLICACIONES
Muchos problemas se pueden representar utilizando grafos en los que se asigna
un peso a cada una de las aristas, lo que puede ser aprovechado para usar los
algoritmos de Warshall. Consideremos a modo de ilustracin la forma en que se
representa el sistema de vuelos de una lnea area. Construimos un modelo
bsico representando las ciudades mediante vrtices y los vuelos mediante
aristas. Los problemas relacionados con distancias pueden representarse
asignndole a las aristas las distancias entre ciudades. Los problemas
relacionados con tiempos de vuelo se pueden representar asignndoles a las
aristas los tiempos de vuelo correspondiente.

Primero presentaremos matemticamente los algoritmos de Warshall, tanto para
hallar Caminos existentes y Caminos Mnimos:

MODELOS MATEMTICOS DEL ALGORITMO
- Matriz de Caminos
Dado el grafo , obtener su matriz de adyacencia :







Luego, hacemos una matriz y y empezaremos a aplicar el
algoritmo como aqu presentamos:

Que resultara ser la Matriz de Caminos Existentes.

- Matriz de Caminos Mnimos
Dado el grafo ponderado, obtener su matriz de adyacencia :


1; si existe camino (i; j)
=
0; caso contrario

; Si existe camino (i; j)
=
; caso contrario

MATEMATICA DISCRETA Pgina 7






Luego, hacemos una matriz y y empezaremos a aplicar el algoritmo
como aqu presentamos:

Que resultara ser la Matriz de Caminos Mnimos.

Ahora pasaremos a presentar algunos problemas que bien se pueden resolver
fcilmente aplicando razonadamente los algoritmos de Warshall.

1) Dado el grafo G encontrar el matriz de caminos:


























Primeramente obtenemos la matriz de adyacencia A.

a
b
e
d
c
MATEMATICA DISCRETA Pgina 8

(
(
(
(
(
(

=
0 0 0 1 1
0 0 1 0 0
0 0 0 1 0
1 0 0 1 0
1 1 0 1 1
A
Finalmente ingresamos al programa el nmero de nodos que es 5 y matriz de
adyacencia A.



Dnde la matriz obtenida es la matriz de caminos P:

(
(
(
(
(
(

=
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
P

2) Dado el grafo ponderado G, con vrtices enumerados desde 1 al 6 y de manera
arbitraria se numera las aristas como se muestra en la figura, encontrar el matriz
de caminos mnimo.













1
2
3
5
4
1
2
7
4
5 1
0
8
6
3
MATEMATICA DISCRETA Pgina 9












Primeramente construimos la matriz de pesos A del grafo.

(
(
(
(
(
(
(
(

=
0 0 0 0 0 9
0 0 3 0 0 0
0 0 0 0 0 0
1 8 6 0 0 0
0 0 0 1 0 7
5 0 0 4 2 0
A

Luego ingresamos al programa el nmero de nodos que es 6 y la matriz A.



Donde la matriz obtenida es la matriz P de caminos mnimos.

MATEMATICA DISCRETA Pgina 10

(
(
(
(
(
(
(
(

=
13 20 18 12 11 9
0 0 3 0 0 0
0 0 0 0 0 0
1 8 6 13 12 10
2 9 7 1 9 7
4 11 9 3 2 9
P

ALGUNOS PROBLEMAS CONCURSO DE PROGRAMACIN ACM
Se conocen las distancias entre cierto nmero de ciudades. Un viajante debe, a
partir de unas de ellas, visitar cada ciudad exactamente una vez y regresar al punto
de partida habiendo recorrido en total la menor distancia posible.
Observacin: Este problema tambin puede ser enunciado tambin de la siguiente
manera: Dado un grafo G conexo y ponderado y dado uno de sus vrtices ,
encontrar el ciclo Halmintoniano de coste mnimo que comienza y termina en .
Un camionero conduce desde Bilbao a Mlaga siguiendo una ruta dada y
llevando un camin que le permite, con el tanque lleno, recorrer kilmetros sin
parar. El camionero dispone de un mapa de carreteras que le indica las distancias
entre las gasolineras que hay en su ruta. Como va con prisa, el camionero desea
pararse a repostar el menor nmero de veces posible.
Observacin: se puede aplicar el Algoritmo de Warshall para caminos mnimos.
Unos ambiciosos ingenieros tienen pensado construir una gran ciudad a partir de
unos planos que elaboraron. El plano de la ciudad consta de esquinas y
calles bidireccionales. Cada calle une a lo ms a dos esquinas. Se dice que existe
un camino que une a dos esquinas y , si , si hay una calle conectando
directamente a las dos esquinas, o si existe una secuencia de esquinas
, tal que , y toda (menos ) est unida
directamente con por una calle. Los ingenieros se preguntan si habrn
planificado mal algo, como por ejemplo, que si una persona vive en una esquina A y
quiere ir a visitar a un amigo que vive en una esquina B, no exista un camino que le
permita llegar a la esquina B.

V. PSEUDOCODIGO

ALGORITMO DE WARSHALL
Programa algoritmoWarshall
Variables:
Entero: A[100][100];
Carcter: respuesta;
Inicio
Leer n;
Llamar CargarMat( A, n);
MATEMATICA DISCRETA Pgina 11

Llamar algWarshall ( A, n );
Llamar mostrar( A, n );
Leer resp;
Si ( resp == n o resp == N) entonces
Retornar 0;
Fin_si;
Fin

Funcin operadorAND (entero A,entero B)
Devolver entero;
Variables:
Enteros: c,opcin;
Inicio
opcion A;
Segn (opcin) hacer
caso 0:
si (B==0) hacer
c 0;
si (B==1) hacer
c 0;
caso 1:
si (B==0) hacer
c 0;
si (B==1) hacer
c 1;
Retornar c;
Fin_segn
Fin

Funcin operadorOR (entero A,entero B)
Devolver entero;
Variables:
Enteros: c,opcin;
Inicio
opcion A;
Segn (opcin) hacer
caso 0:
si (B==0) hacer
c 0;
si (B==1) hacer
c 1;
caso 1:
si (B==0) hacer
MATEMATICA DISCRETA Pgina 12

c 1;
si (B==1) hacer
c 1;
Fin_segn
Fin

Funcin CargarMat( entero A[][100], entero n)
Devolver vaco;
Inicio
Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
Leer A[i][j];
Fin_para
Fin_para
Fin
Funcin AlgWarshall( entero A[][100], entero n)
Devolver vaco;
Inicio
Para entero k, desde 1 hasta n hacer
Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
A[ i ][ j ] = operadorOR( A[ i ][ j ], operadorAND( A[ i ][ k ],
A[ k ][ j ] ) );
Fin_para
Fin_para
Fin_para
Fin
Funcin Mostrar (entero A[][100], entero n)
Devolver vaco;
Inicio
Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
Escribir A[i][j];
Fin_para
Escribir (fin de lnea);
Fin_para
Fin

ALGORITMO DE FLOYD Y WARSHALL

Constante INF = 10000
MATEMATICA DISCRETA Pgina 13

Programa warshallCaminoMinimo
Variables:
Entero: A[100][100], n;
Carcter: resp;
Inicio
Leer n;
Llamar CargarMat( A, n );
Llamar matrizNuevo( A, n );
Llamar algWarshall( A, n );
Llamar matrizCamino( A, n );
Llamar Mostrar( A, n );
Leer resp;
Si ( resp == n o resp == N) entonces
Retornar 0;
Fin_si
FIn

Funcin CargarMat( entero A[][100], entero n )
Devolver vaco;
Inicio
Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
Leer A[i][j];
Fin_para
Fin_para
Fin

Funcin matrizNuevo( entero A[][100], entero n )
Devolver vaco;
Inicio
Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
Si ( A[i][j] == 0) entonces
A[i][j] INF ;
Fin_si
Fin_para
Fin_para
Fin

Funcin Mostrar( entero A[][100], entero n )
Devolver vaco;
Inicio
MATEMATICA DISCRETA Pgina 14

Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
Escribir A[i][j];
Fin_para
Escribir (fin de lnea);
Fin_para
Fin

Entero minValor( entero A, entero B )
Devolver entero;
Variabes:
Entero: menor;
Inicio
menor A;
Si ( menor > B) entonces
menor B;
Fin_si
retornar menor;
Fin

Funcin algWarshall( entero A[][100], entero n )
Devolver vaco;
Inicio
Para entero k, desde 1 hasta n hacer
Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
A[ i ][ j ] = minValor( A[ i ][ j ] , A[ i ][ k ] + A[ k ][ j ] );
Fin_para
Fin_para
Fin_para
Fin

Funcin matrizCamino( entero A[][100], entero n )
Devolver vaco;
Inicio
Para entero i, desde 1 hasta n hacer
Para entero j, desde 1 hasta n hacer
Si ( A[i][j] >=INF) entonces
A[i][j] 0 ;
Fin_si
Fin_para
Fin_para
MATEMATICA DISCRETA Pgina 15

Fin

Вам также может понравиться