Sei sulla pagina 1di 52

Programa desarrollado

Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
1


1

Universidad Abierta y a Distancia de Mxico


Licenciatura en Matemticas

Computacin I


6 Cuatrimestre


Unidad 3. Redes


Clave:
050920621/060920621












Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
2


2
ndice
Presentacin de la unidad .......................................................................................................................... 3
Propsitos ................................................................................................................................................... 3
3.1. Fundamentos ........................................................................................................................................ 3
3.1.1. Conceptos Bsicos .......................................................................................................................... 4
3.1.2. Caractersticas ................................................................................................................................. 9
Actividad 1. Fundamentos de redes......................................................................................................... 17
3.2. Flujo ..................................................................................................................................................... 18
3.2.1. Flujo Mximo .................................................................................................................................. 19
3.2.2. Teorema del Corte Mnimo y Flujo Mximo .................................................................................... 22
3.2.3. Algoritmo de Corte Mnimo y Flujo Mximo .................................................................................... 24
Actividad 2. Teoremas y algoritmos de flujo ........................................................................................... 28
3.3. Conexidad ........................................................................................................................................... 29
3.3.1. Conexidad Puntual ......................................................................................................................... 31
3.3.2. Conexidad Lineal ........................................................................................................................... 33
3.3.3. Teorema de Menger ....................................................................................................................... 34
3.4. Programacin ..................................................................................................................................... 36
3.4.1. Solucin de Problemas de Redes .................................................................................................. 37
Actividad 3. Anlisis de conexidad .......................................................................................................... 49
Autoevaluacin .......................................................................................................................................... 50
Evidencia de Aprendizaje. Programacin de algoritmos para resolver problemas de redes .............. 51
Cierre de la Unidad .................................................................................................................................... 51
Para saber ms .......................................................................................................................................... 51
Fuentes de consulta .................................................................................................................................. 52




Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
3


3

Presentacin de la unidad

Las redes aparecen en casi cualquier rea del quehacer humano, desde los circuitos elctricos hasta las
redes sociales, y requieren soluciones para sus problemas. En esta unidad tendrs la oportunidad de
aprender los fundamentos de las redes para que seas capaz de analizarlas y proponer soluciones a sus
problemas de flujo.

La Teora de grficas aporta una plataforma para representar las redes en el mbito matemtico.
Aprenders conceptos, teoremas y algoritmos para computadora alrededor de esta teora que te ayudarn
a resolver problemas de las representaciones de las redes.

Tambin estudiars conceptos, mtodos y algoritmos que te permitirn analizar la conexidad de las
grficas. Finalmente conocers el cdigo ejecutable en una computadora de algoritmos relacionados con
grficas y flujo en redes.


Propsitos

Al finalizar esta unidad sers capaz de:

Identificar los fundamentos de las redes.
Identificar teoremas y algoritmos de flujo en las redes.
Analizar la conexidad de grficas.
Programar algoritmos para resolver problemas de redes.


Competencia especfica

Utilizar algoritmos sobre grficas dirigidas para determinar flujos y rutas mediante herramientas
informticas.

3.1. Fundamentos

Los procesos y algoritmos que discutiremos en esta unidad son, de muchas maneras, el producto directo
de la necesidad de resolver esta clase especfica de problemas. En el libro (Network Flows: Theory,
Algorithms, and Applications.) de Ahuja, Ravindra K., Thomas L. Magnanti, and James B. Orlin. (1993).
Contiene una discussion extensa de de numerosas aplicaciones de los algoritmos de flujo en redes:

Entre las aplicaciones que se discuten en el libro se encuentran las siguientes:

Dado un conjunto de tareas a ser realizado por un conjunto de empleados, encontrar una tarea que
minimiza el gasto global cuando diferentes empleados cuestan diferentes cantidades dependiendo
de la tarea a la que fueron asignados.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
4


4
Dado un conjunto de solicitantes que han sido entrevistados para un conjunto de puestos
disponibles, encontrar un esquema que maximiza el nmero de solicitantes seleccionados para los
trabajos para los cuales estn calificados.

Determinar la forma ms efectiva en costo para embarcar bienes desde un conjunto de fbricas
proveedoras hacia un conjunto de tiendas minoristas que venden esos bienes.

Determinar la forma ms efectiva en costo para embarcar bienes desde un conjunto de fbricas
proveedoras hacia un conjunto de tiendas minoristas que venden esos bienes, considerando el uso
potencial de un conjunto de almacenes como estaciones intermedias.

Dada una red que muestra la capacidad potencial para que bienes puedan ser embarcados entre
dos localidades, calcular el flujo mximo soportado por la red.

Como un ejemplo ms, podemos estar examinando un mapa de rutas de una lnea area y formulando
preguntas como Cul es la forma ms rpida de llegar de esta ciudad a esta otra? O quizs estamos
interesados en la manera ms barata de llegar, no en el tiempo. Para responder a estas preguntas
necesitamos informacin acerca de las interconexiones entre los objetos.

Los circuitos elctricos son otro ejemplo de la importancia de las conexiones entre objetos. Los dispositivos
elctricos pueden ser representados y procesados dentro de una computadora para responder preguntas
simples como Ya todo est conectado? O preguntas ms complejas como Funcionar este circuito si se
construye?

La estructura o patrn de interconexin de una red puede ser representada por una grfica. Las
propiedades de la grfica de una red se relacionan a menudo con las caractersticas especficas de esa
red; por ejemplo, siendo el ruteo una funcionalidad esencial en muchas redes, la complejidad
computacional del ruteo de la trayectoria ms corta depende de la cuenta de saltos en la grfica
subyacente. La Teora de Grficas es una rama de las matemticas iniciada por Euler en 1736 y ha
encontrado muchas aplicaciones en la ingeniera y en la ciencia para resolver problemas de redes.


3.1.1. Conceptos bsicos

En Matemticas discretas tuviste la oportunidad de trabajar con la teora de grficas, as que slo
revisaremos a continuacin algunos conceptos que seguramente ya conoces y que conectaremos con
representaciones en computadora; utilizaremos ms adelante esas representaciones para desarrollar
algoritmos capaces de resolver problemas de redes.

Una grfica consiste de un conjunto de objetos llamados vrtices, con ciertos pares de estos objetos
conectados por enlaces llamados aristas (edges, en ingls). Por ejemplo, la grfica de la figura siguiente
contiene cuatro vrtices (A, B, C, D), con B conectado a cada uno de los otros tres vrtices, y C y D
conectados tambin. Decimos que dos vrtices son vecinos si estn conectados por una arista.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
5


5
Nota. La expresin vrtice es propia de la Teora de Grficas; en la Teora de Redes se utiliza el trmino
nodo. Como estaremos utilizando grficas y programando algoritmos alrededor de ellas para resolver
problemas de redes, mantendremos el uso de "vrtice" para evitar confusiones.




En la figura anterior se considera que la relacin entre los dos extremos de una arista es simtrica; la arista
simplemente los conecta. En otras situaciones, sin embargo, queremos expresar relaciones asimtricas
por ejemplo, que A apunta a B pero no viceversa. Para esto, definimos una grfica dirigida como un
conjunto de vrtices y aristas dirigidas; cada arista dirigida es un enlace de un vrtice al otro en el que la
direccin es importante. Las grficas dirigidas se trazan generalmente como muestra la figura siguiente,
con las aristas representadas por flechas.



Cuando queramos enfatizar que una grfica no es dirigida, la podemos llamar precisamente grfica no-
dirigida; pero en general las grficas que discutamos sern no-dirigidas a menos que se especifique otra
cosa.

Las Grficas como Modelos de Redes

Las grficas son tiles porque sirven como modelos matemticos de las estructuras de red. Por ejemplo, la
figura siguiente muestra la primera estructura de internet llamada entonces Arpanet en diciembre de
1970, cuando solamente tena 13 sitios (trazamos las localidades slo de forma aproximada). Si ests
interesado, puedes encontrar diagramas acerca de este proyecto en
(http://som.csudh.edu/cis/lpress/history/arpaMaps/).






Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
6


6



Los vrtices representan computadoras y aparece una arista uniendo dos vrtices si existe un enlace de
comunicacin entre ellos. El diagrama puede reducirse a una grfica de 13 vrtices similar a las grficas
simples de las figuras anteriores.

Notars que el patrn de conexiones no depende de la posicin de los vrtices; lo que importa es cules
vrtices estn conectados a cules otros. Obtenemos la grfica siguiente:





Las grficas aparecen en muchos dominios, siempre que es til representar cmo las cosas estn fsica o
lgicamente enlazadas unas con otras en una estructura de red. El caso de los 13 vrtices de Arpanet es
un ejemplo de una red de comunicaciones, en la cual los vrtices son computadoras u otros dispositivos
que pueden trasmitir mensajes, y las aristas representan los enlaces a travs de los cuales los mensajes
son transmitidos.

Existen otros tipos de redes como las redes sociales, en las cuales los vrtices son personas o grupos de
personas y las aristas representan alguna clase de interaccin social; y las redes de informacin, en las
cuales los vrtices son recursos de informacin tales como pginas web o documentos, y las aristas


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
7


7
representan conexiones lgicas tales como hipervnculos, citas o referencias cruzadas. La lista de reas en
las que las grficas tienen una presencia es muy larga; te presentamos a continuacin dos imgenes que
se encuentran a menudo y que contienen grficas.










a) Red del Metro (Cd. de Mxico) b) Rutas areas de Aeromxico


Trayectorias y Conectividad

Repasemos ahora algunos de los conceptos y definiciones fundamentales que rodean a las grficas.

Trayectorias

Hemos estado exponiendo algunos ejemplos de grficas en diferentes reas, y seguramente habrs notado
que surgen naturalmente algunos temas con el uso de grficas en estas reas. Uno de los ms notorios es
la idea de que las cosas viajan a travs de las aristas de una grfica, movindose de vrtice a vrtice en
secuencia podra ser un pasajero siguiendo una secuencia de vuelos de una aerolnea, una pieza de
informacin siendo pasada de persona a persona en una red social, o un usuario de computadora o pieza
de software visitando una secuencia de pginas web a travs de hipervnculos.

Esta idea motiva la definicin de camino en una grfica: un camino es simplemente una secuencia de
vrtices con la propiedad de que cada par consecutivo en la secuencia est conectado por una arista.
Algunas veces tambin es til pensar que el camino contiene no slo los vrtices sino tambin la secuencia
de aristas que conectan esos vrtices.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
8


8
En el ejemplo anterior de Arpanet, la secuencia de vrtices MIT, BBN, RAND, UCLA es un camino, como
lo es tambin la secuencia CASE, LINCOLN, MIT, UTAH, SRI, UCSB. En esta definicin, un camino puede
repetir vrtices, por ejemplo: SRI, STAN, UCLA, SRI, UTAH, MIT. Pero la mayora de caminos que
consideraremos no hacen esto; si queremos enfatizar que el camino que estamos discutiendo no repite
vrtices podemos referirnos a l como una trayectoria.

Ciclos

Un tipo particularmente importante de camino es un ciclo, el cual informalmente es una estructura de
anillo como la de la secuencia de vrtices LINC, CASE, CARN, HARV, BBN, MIT, LINC.

Ms precisamente, un ciclo es un camino con al menos tres aristas, en la cual el primer vrtice y el ltimo
son el mismo; el resto de los vrtices son distintos. En la grfica de Arpanet se pueden encontrar muchos
ciclos: SRI, STAN, UCLA, SRI o SRI, STAN, UCLA, RAND, BBN, MIT, UTAH, SRI.

De hecho, cada arista en la red de Arpanet de 1970 pertenece a un ciclo, y esto fue hecho por diseo:
significa que si alguna arista falla todava habra una forma de llegar de un vrtice a cualquier otro.

De forma ms general, los ciclos en las redes de comunicaciones y transporte estn presentes a menudo
para permitir la redundancia para proporcionar rutas alternativas.

Tambin en las redes sociales de amistad notamos a menudo ciclos en la vida diaria. Cuando descubres,
por ejemplo, que el amigo de la secundaria del primo de tu esposa es alguien que trabaja con tu hermano,
ests hablando de un ciclo que te contiene a ti, a tu esposa, a su primo, a su amigo de la secundaria, a su
compaero de trabajo (tu hermano), y finalmente a ti de nuevo.
Conectividad o Conexidad

Dado una grfica, es natural preguntar si cada vrtice puede alcanzar a todos los dems vrtices a travs
de una trayectoria. De acuerdo a esto, podemos decir que una grfica es conexa cuando todos sus
vrtices estn conectados. Dos vrtices estn conectados si existe un camino que los une.

Por ejemplo, la grfica de Arpanet es conexa. De forma general, se espera que la mayora de redes de
comunicaciones y de transporte estn conectadas dado que su meta es mover trfico de un vrtice a otro.

Por otro lado, no existe una razn a priori para esperar que las grficas en otros casos estn conectadas
por ejemplo, en una red social, es razonable esperar que existan dos personas para los cuales no es
posible construir una trayectoria entre ellas. La siguiente figura muestra un ejemplo de una grfica
disconexa:



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
9


9



Componentes

La figura anterior hace visualmente aparente un hecho bsico acerca de las grficas disconexas: si una
grfica es disconexa, se divide naturalmente en un conjunto de piezas conexas, grupos de vrtices que
estn conectados cuando se les considera como grficas aisladas, de modo que no se traslapan. En la
misma figura anterior, puedes ver que la grfica consiste de tres de tales piezas: una que contiene los
vrtices A y B, otra que contiene los vrtices C, D, y E, y otra ms que contiene el resto de los vrtices.

Con el fin de precisar esta nocin, decimos que una componente conexa de una grfica (a menudo llamada
simplemente componente) es una subgrfica conexa maximal tal que:

a. Cada vrtice en el subconjunto tiene una trayectoria hacia cada uno de los otros
b. El subconjunto no es parte de un conjunto ms grande con la propiedad de que cada vrtice puede
llegar a cualquier otro.

Nota que tanto (a) como (b) son necesarios para formalizar la definicin intuitiva: (a) indica que el
componente est conectado internamente, y (b) indica que realmente es una pieza independiente de la
grfica, no una parte conexa de una pieza ms grande. Por ejemplo, al conjunto de vrtices F, G, H y J de
la figura anterior no lo podemos considerar como un componente, porque viola la parte (b) de la definicin:
aunque existen trayectorias entre todos los pares de vrtices, el conjunto pertenece a un conjunto ms
grande (vrtices F a M), en el cual tambin existen trayectorias para todos los pares.

El dividir una grfica en sus componentes es solamente una primera forma de describir su estructura.
Dentro de un componente dado, puede existir una estructura interna ms rica que sea importante para la
interpretacin de la red.


3.1.2. Caractersticas

Una grfica est formada por dos conjuntos, V el conjunto de vrtices que debe ser a lo ms
numerable (y en este caso podemos pedir que sea finito), y A el conjunto de aristas que est


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
10


10
formado por parejas de elementos de V. La grfica se define independientemente de la
representacin. Por ejemplo, las dos figuras siguientes representan la misma grfica.



Un camino del vrtice x al y en una grfica, es una lista de vrtices en la cual vrtices sucesivos
se conectan a travs de aristas. Por ejemplo BAFEG es una trayectoria de B a G en la grfica
anterior.
Una grfica es conexa si existe una trayectoria desde cada uno de los vrtices hacia todos los otros
vrtices.
Una grfica disconexa est formado de componentes conexos, por ejemplo la grfica de la figura
anterior tiene tres componentes conexos.
Una trayectoria es un camino en el cual ningn vrtice est repetido. Por ejemplo, BAFEGAC no es
una trayectoria simple.
Un ciclo es una trayectoria que es simple excepto que el primero y el ltimo vrtice son el mismo.
Por ejemplo, la trayectoria AFEGA es un ciclo.
Una grfica conexa sin ciclos se denomina rbol.
Un grupo de rboles disconexos entre s se denomina bosque.
Un rbol generador (spanning tree) es una subgrfica generadora a toda subgrfica que contiene a
todos los vrtices. Por ejemplo, las aristas AB AC AF FD DE EG forman un rbol generador para el
componente grande de la grfica anterior.
Si se agrega una arista a un rbol, se forma un nico ciclo.
Un rbol con v vrtices tiene exactamente v-1 aristas.
Si una grfica con v vrtices tiene menos de v-1 aristas, no es conexa. Si tiene ms de v-1 aristas,
debe tener un ciclo.

Estamos utilizando v para denotar el nmero de vrtices en una grfica y utilizaremos a para denotar el
nmero de aristas (edges en ingls). a puede variar desde 0 hasta

. Tambin se suele utilizar la


letra p para referirse a la cardinalidad del conjunto V.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
11


11
Las grficas con relativamente pocas aristas son llamadas escasas.
Las grficas con una falta relativamente baja de las aristas posibles son llamadas densas.

Las grficas que hemos mostrado hasta el momento son llamados grficas no-dirigidas, el tipo ms
simple de grfica. Existen otros tipos de grficas ms complejos que tienen ms informacin asociada con
los vrtices y las aristas:

En las grficas ponderadas, se asignan cantidades (pesos o valores) a cada arista para
representar, por ejemplo, distancias o costos.
En las grficas dirigidas, las aristas son de un solo sentido: una arista puede ir de x a y pero no
de y a x.
Las grficas ponderadas dirigidas son llamadas a veces redes.

La informacin extra que contienen las grficas ponderadas y las dirigidas las hace obviamente un poco
ms difciles de manipular que las grficas simples no-dirigidas.

Representaciones en Computadora

Para poder procesar grficas con un programa de computadora, es necesario decidir cmo representarlos
dentro de la computadora. Discutiremos dos de las representaciones ms comunes; la seleccin de cul
usar depende principalmente de si la grfica es densa o escasa aunque, como es lo usual, la naturaleza de
las operaciones a efectuar juega un papel importante.

El primer paso para representar una grfica es mapear los nombres de los vrtices a nmeros enteros
entre 1 y v. La razn principal del mapeo es hacer posible el acceso rpido a la informacin
correspondiente a cada vrtice, a travs de un indexado de arreglos.

Se puede utilizar cualquier esquema estndar de bsqueda; por ejemplo, podemos trasladar los nombres
de los vrtices a enteros entre 1 y v manteniendo una tabla hash o un rbol binario que puede ser
examinado para encontrar el entero correspondiente a un determinado nombre de vrtice.

Recuerdas que estudiamos estas clases de algoritmos en la unidad anterior? Asumimos entonces que
una funcin indice est disponible para convertir nombres de vrtice a enteros entre 1 y v, y una funcin
nombre para convertir enteros a nombres de vrtice.

Para hacer los algoritmos fciles de seguir, utilizamos aqu nombres de vrtice de una letra, con la i-sima
letra del alfabeto correspondiendo al entero i. Aunque nombre e indice son simples en nuestros
ejemplos, su uso facilita la extensin de los algoritmos para manipular grficas con nombres reales de
vrtice por medio de las tcnicas de bsqueda que aprendiste.

La representacin ms directa de las grficas es la llamada matriz de adyacencia: se mantiene un arreglo v
por v de valores booleanos, con a[x][y] establecido en 1 si existe una arista del vrtice x al vrtice y, y
establecido en 0 en otro caso.


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
12


12

La matriz de adyacencia para la grfica que hemos estado usando se muestra a continuacin.

A B C D E F G H I J K L M
A 1 1 1 0 0 1 1 0 0 0 0 0 0
B 1 1 0 0 0 0 0 0 0 0 0 0 0
C 1 0 1 0 0 0 0 0 0 0 0 0 0
D 0 0 0 1 1 1 0 0 0 0 0 0 0
E 0 0 0 1 1 1 1 0 0 0 0 0 0
F 1 0 0 1 1 1 0 0 0 0 0 0 0
G 1 0 0 0 1 0 1 0 0 0 0 0 0
H 0 0 0 0 0 0 0 1 1 0 0 0 0
I 0 0 0 0 0 0 0 1 1 0 0 0 0
J 0 0 0 0 0 0 0 0 0 1 1 1 1
K 0 0 0 0 0 0 0 0 0 1 1 0 0
L 0 0 0 0 0 0 0 0 0 1 0 1 1
M 0 0 0 0 0 0 0 0 0 1 0 1 1

Notars que cada arista est representada en realidad por dos bits: una arista que conecta x y y est
representada por valores verdaderos tanto en a[x][y] como en a[y][x]. Puede ahorrarse espacio
almacenando solamente la mitad de esta matriz simtrica, pero los algoritmos resultan un poco ms
simples cuando se utiliza la matriz completa. Asimismo, es usualmente conveniente asumir que existe una
arista en cada vrtice con s mismo, as a[x][x] est establecido en 1 para x desde 1 a v.


Introduciendo una Grfica a la Computadora

Para introducir una grfica a la computadora, necesitamos convenir en un formato de entrada. Una
posibilidad es usar la matriz de adyacencia como el formato de entrada, pero esto resulta inapropiado para
grficas escasas. Usaremos entonces un formato ms directo: primero leemos los nombres de los vrtices,
y luego pares de nombres de vrtices (lo cual define las aristas).

Una manera sencilla de proceder es leer los nombres de los vrtices y guardarlos en una tabla hash o en
un rbol de bsqueda binaria y asignar a cada nombre de vrtice un entero que se usar para acceder a
los arreglos de vrtices indexados, como la matriz de adyacencia. A la lectura del i-simo vrtice se le
puede asignar el entero i.

Por simplicidad, primero leemos v y a, luego los vrtices y las aristas. Como alternativa, la entrada podra
ser organizada con un delimitador que separe los vrtices de las aristas, y entonces el programa podra
determinar v y a de la entrada.

El orden en el que aparecen las aristas no es importante, dado que cualquier ordenamiento de las aristas
representa la misma grfica y resulta en la misma matriz de adyacencia. Para construir en la computadora
la matriz de adyacencia, se puede utilizar el siguiente programa (en estas secciones detallaremos slo las
partes ms relevantes de los programas y usaremos algo de pseudocdigo para facilitar las explicaciones;
en la ltima seccin de la unidad encontrars programas completamente funcionales).

int V, A;


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
13


13
int a[maxV][maxV];
void matrizady(){
int j, x, y;
// Instrucciones para leer V y A
for (x = 1; x <= V; x++)
for (y = 1; y <= V; y++) a[x][y] = 0;
for (x = 1; x <= V; x++) a[x][x] = 1;
for (j = 1; j <= A; j++) {
// Instrucciones para leer v1 y v2
x = indice(v1); y = indice(v2);
a[x][y] = 1; a[y][x] = 1;
}
}

Los tipos de v1 y v2 y el cdigo para indice no se han includo en el programa, pero pueden agregarse
fcilmente, dependiendo de la representacin deseada. Por ejemplo, v1 y v2 pueden ser del tipo carcter
e indice puede ser una simple funcin que devuelva c A + 1 o algo parecido.

La representacin con la matriz adyacente es satisfactoria solamente si las grficas que van a ser
procesadas son densas: la matriz requiere v
2
bits de almacenamiento y v
2
pasos slo para inicializarla. Si el
nmero de aristas (nmero de bits 1 en la matriz) es proporcional a v
2
, esto puede ser aceptable porque
alrededor de v
2
pasos se requieren para leer las aristas en cualquier caso. Sin embargo, si la grfica es
escasa, simplemente la inicializacin de la matriz puede ser el factor dominante en el tiempo de ejecucin
de un algoritmo.

Analicemos ahora una representacin que es ms adecuada para grficas que no son densas. En la
representacin de la estructura de adyacencia todos los vrtices conectados a cada vrtice estn listados
en una lista de adyacencia para ese vrtice. Esto puede ser realizado fcilmente con listas enlazadas. El
programa que sigue construye la estructura de adyacencia para la grfica que estamos tomando como
ejemplo. Las listas enlazadas se construyen de la forma usual, con un vrtice artificial z al final (el cual
apunta a s mismo). Los vrtices artificiales para el inicio de las listas se mantienen en un arreglo ady
indexado por el vrtice. Para agregar a esta representacin de la grfica una arista conectando x a y,
agregamos la lista de adyacencia de x a y, y la lista de adyacencia de y a x.

struct vertice {
int v;
struct vertice *sig; };
int V, A;
struct vertice *ady[maxV], *z;
void listaady() {
int j, x, y;
struct vertice *t;
// Instrucciones para leer V y A
z = new vertice;
z->next = z;
for (j = 1; j <= V; j++)


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
14


14
ady[j] = z;
for (j = 1; j <= A; j++) {
// Instrucciones para leer v1 y v2;
x = indice(v1); y = indice(v2);
t = new vertice;
t->v = x; t->sig = ady[y]; ady[y] = t;
t = new vertice;
t->v = y; t->sig = ady[x]; ady[x] = t;
}
}

La figura siguiente muestra la representacin con estructura de adyacencia construida por el programa
anterior.



La representacin de lista de adyacencia es mejor para grficas escasas porque el espacio requerido es
menor comparado con el espacio requerido por la representacin de matriz de adyacencia.

Nota que, de nuevo, cada arista est representada dos veces. Es importante incluir ambas porque, de otra
manera, preguntas simples como Cules vrtices estn conectados directamente al vrtice x? no
pueden ser respondidas eficientemente.

Para esta representacin, el orden en el que las aristas aparecen en la entrada es muy importante:
determina el orden (junto con el mtodo de insercin de lista utilizado) en el cual los vrtices aparecen en
las listas de adyacencia. Debido a esto, la misma grfica puede ser representada de muy diversas formas
en una estructura de este tipo.

El orden en el cual las aristas aparecen en la lista de adyacencia afecta, a su vez, el orden en el cual las
aristas son procesadas por los algoritmos. Mientras que un algoritmo debe producir una respuesta correcta
sin importar cmo estn ordenadas las aristas en las listas de adyacencia, puede llegar a la respuesta a
travs de secuencias muy diferentes de clculos. Si hay ms de una respuesta correcta, los diferentes
rdenes de entrada pueden producir diferentes resultados de salida.


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
15


15

Algunas operaciones simples no son soportadas por esta representacin. Por ejemplo, si se desea eliminar
un vrtice x, y todas las aristas conectadas a l, no es suficiente eliminar vrtices de la lista de adyacencia:
cada vrtice en esta lista especifica otro vrtice cuya lista de adyacencia debe ser examinada para eliminar
un vrtice correspondiente a x. Este problema puede ser corregido enlazando los dos vrtices que
corresponden a una arista en particular y haciendo las listas de adyacencia doblemente enlazadas. As, si
una arista va a ser removida, los dos vrtices correspondientes a esa arista pueden ser eliminados
rpidamente. Por supuesto, estos enlaces extra son incmodos de procesar, y no deberan ser incluidos a
menos que se requieran operaciones como la eliminacin.

Tales consideraciones tambin aclaran por qu no utilizamos una representacin directa para las grficas:
una estructura de datos que modele la grfica exactamente, con vrtices representados por registros
asignados y listas de aristas conteniendo enlaces a los vrtices en lugar de nombres de vrtice. Sin un
acceso directo a los vrtices, las operaciones simples se vuelven desafiantes. Por ejemplo, para agregar
una arista a una grfica representado de esta manera, se tendra que buscar de alguna manera a travs de
la grfica para encontrar los vrtices.

Las grficas dirigidas y ponderadas se representan con estructuras similares. Para las grficas dirigidas,
todo es lo mismo, excepto que cada arista est representada slo una vez: una arista de x a y est
representada por un 1 en a[x][y] en la matriz de adyacencia o por la aparicin de y en la lista de
adyacencia de x dentro de la estructura de adyacencia.

Para las grficas ponderadas, de nuevo todo es lo mismo excepto que se llena la matriz de adyacencia con
pesos en lugar de valores booleanos (utilizando algn peso no existente para representar la ausencia de
una arista), o incluir en la estructura de adyacencia un campo para el peso de la arista dentro de los
registros de la lista de adyacencia.

Es a menudo necesario asociar otra informacin con los vrtices de una grfica para permitirle modelar
objetos ms complicados o para ahorrar informacin de control en algoritmos complicados. La informacin
extra asociada con cada vrtice puede ser acomodada utilizando arreglos auxiliares indexados por el
nmero de vrtice o haciendo ady un arreglo de registros en la representacin de estructura de
adyacencia.

La informacin extra asociada con cada arista puede ser colocada en los vrtices de la lista de adyacencia
(o en un arreglo a de registros en la representacin de matriz de adyacencia), o en arreglos auxiliares
indexados por el nmero de arista (esto requiere la numeracin de las aristas).

Recorrido en Profundidad

Cuando hablamos de redes y grficas, empezamos inmediatamente a hacernos preguntas: Es la grfica
conexa? Si no, Cules son sus componentes conexos? La grfica tiene un ciclo? Estos y otros
problemas pueden ser resueltos con diversos algoritmos. Discutiremos a continuacin un mtodo llamado
bsqueda en profundidad (depth-first search en ingls), el cual visita cada vrtice y revisa cada arista de
la grfica sistemticamente.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
16


16
Comencemos por concentrarnos en la forma de examinar cada pieza de la grfica de una manera
organizada:

Utilizamos un arreglo vid[V] para registrar el orden en el que los vrtices son visitados.
Cada entrada o celda en el arreglo se inicializa con el valor de novisitado para indicar que ningn
vrtice ha sido visitado todava.

La meta es visitar sistemticamente todos los vrtices de la grfica, estableciendo en la entrada vid
correspondiente el id del vrtice i visitado, en el que id = 1, 2,, v. El siguiente programa utiliza una
funcin visitar que visita todos los vrtices del mismo componente conexo con el vrtice dado como
argumento.

void recorrer()
{
int k;
for (k = 1; k <= V; k++)
vid[k] = novisitado;
for (k = 1; k <= V; k++)
if (vid[k] == novisitado) visitar(k);
}

El primer ciclo for inicializa el arreglo vid. Luego visitar es llamada para el primer vrtice, lo cual tiene
como resultado que los valores vid de todos los vrtices conectados a ese vrtice son modificados a
valores diferentes de novisitado. Luego recorrer explora el arreglo vid para encontrar un vrtice que
todava no ha sido visitado y llama visitar para ese vrtice, continuando de esta manera hasta que todos
los vrtices han sido visitados. Nota que este mtodo no depende de cmo la grfica est representada o
de cmo visitar es implementada.

Una posible implementacin recursiva de visitar para la representacin de lista de adyacencia sera:

Visitar un vrtice.
Revisar todas sus aristas para ver si llevan a vrtices que todava no han sido visitados.
Si esto es as, se les hace la visita.

void visitar(int k)
{
struct vertice *t;
vid[k] = ++id;
for (t = ady[k]; t != z; t = t->siguiente)
if (vid[t->v] == novisitado)
visitar(t->v);
}



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
17


17
En la figura siguiente se puede seguir la operacin del algoritmo. Estn trazadas las llamadas recursivas
durante la funcin visitar. Cada componente conexo lleva a un rbol, denominado rbol de bsqueda
en profundidad del componente.



Es importante notar que este bosque de rboles de recorrido en profundidad es slo otra manera de trazar
la grfica: el algoritmo examina todos los vrtices y aristas de la grfica. Las lneas slidas indican que el
vrtice inferior fue encontrado por el algoritmo en la lista de aristas del vrtice superior y que no haba sido
visitado en ese momento, as que una llamada recursiva fue hecha. Las lneas punteadas corresponden a
aristas de vrtices que ya haban sido visitados, as que la prueba if en visitar fall, y la arista no fue
seguida con una llamada recursiva. Estos comentarios se aplican a la primera vez en que cada arista es
encontrada; la prueba if en visitar tambin evita que se siga la arista la segunda vez que es
encontrada.

Existen algoritmos similares que pueden utilizarse alternativamente como el de bsqueda en profundidad
no recursivo o el de bsqueda en amplitud.


Actividad 1. Fundamentos de redes

A travs de esta actividad podrs identificar dos tipos de bsqueda que se mencionan en el contenido,
pero no se definen (Bsqueda en Profundidad No Recursivo (Nonrecursive Depth-First Search) y
Bsqueda en Amplitud (Breadth-First Search).

Instrucciones:


1. Formen equipos de 4 o 5 integrantes.

2. Colabora con tu equipo en el diseo de una wiki que responder al ttulo: Algoritmos de Recorrido

3. Investiga sobre los siguientes temas:
a. Recorrido en Profundidad No Recursivo (Nonrecursive Depth-First Search).
i. Descripcin.
ii. Diferencia con el algoritmo Recorrido en Profundidad (Depth-First Search).


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
18


18
iii. Cdigo en C o en Java de la funcin bsica.
b. Recorrido en Anchura (Breadth-First Search).
i. Descripcin.
ii. Diferencia con el algoritmo Recorrido en Profundidad No Recursivo (Nonrecursive
Depth-First Search).
iii. Cdigo en C o en Java de la funcin bsica.

4. La wiki que ayudes a construir debe contener al menos, los siguientes elementos: introduccin,
desarrollo (informacin generada por ti), explicacin del funcionamiento de los algoritmos,
diferencia con el otro algoritmo que se menciona, el cdigo en C o en Java de la funcin bsica
(suele ser expresable en 15-20 lneas de cdigo), dos links para conocer ms algunos de los
temas, conclusiones, las fuentes de informacin que consultaste para el desarrollo de la misma y
los nombres de los participantes.

5. Participa, al menos con tres aportaciones.

6. Tienes la posibilidad de ingresar, modificar y eliminar informacin ingresada por ti y por tus
compaeros, es importante que respetes las aportaciones de tus compaeros y cualquier
modificacin sea con fundamentos.
.


3.2. Flujo

Ya que repasamos un poco la teora de grficas, que discutimos la forma en que las grficas pueden
representarse dentro de una computadora y que nos introdujimos a algoritmos que son capaces de
proporcionar respuestas a preguntas bsicas acerca de las grficas, podemos volver a lo que dio origen a
todo este trabajo: las redes.

Existe una infinidad de problemas originados por las redes, pero uno de los problemas tpicos es el del flujo
de materias primas u otros elementos a travs de ellas. Podemos considerar, por ejemplo, una red
petrolera con tubera de diversos tamaos interconectada de formas complejas con vlvulas controlando la
direccin del flujo en las uniones. Para simplificar el trabajo que iniciaremos acerca de esto podemos
suponer tambin que la red tiene una sola fuente (digamos, un campo petrolero) y un solo destino
(digamos, una refinera) a los cuales se conectan la tubera. Los entornos reales, por supuesto, pueden
tener varias fuentes y varios destinos, as que los algoritmos deben ajustarse a la situacin.

Cules son las configuraciones de vlvulas que maximizan la cantidad de petrleo fluyendo de la fuente al
destino? Interacciones complejas que implican el flujo de material en las uniones hacen que este problema
de flujo en una red no sea trivial en su solucin.

Este escenario general tambin puede ser usado para describir el flujo de trfico en las autopistas, de
materiales movindose dentro de las fbricas, etc. Se han estudiado muchas diferentes versiones del
problema, dependiendo de las situaciones prcticas en las que se presenta. Puedes ver que existe una


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
19


19
motivacin muy fuerte para encontrar un algoritmo eficiente que ofrezca una solucin adecuada. El flujo en
las redes es un ejemplo tpico de problemas del rea de investigacin de operaciones.

Existen mtodos matemticos complejos para tratar los problemas de investigacin de operaciones, pero la
solucin de problemas especficos como el del flujo en una red, est estrechamente relacionada a los
algoritmos de grficas, as que es posible desarrollar un programa que resuelva el problema utilizando las
herramientas algortmicas que ya hemos empezado a examinar. El problema contina siendo estudiado
activamente; la mejor solucin todava no ha sido encontrada y nuevos algoritmos siguen siendo
descubiertos.


3.2.1. Flujo mximo

Considera el diagrama idealizado de una pequea red de tuberas de petrleo que se muestra a
continuacin:



Las tuberas son de capacidad fija proporcional a su tamao y el petrleo puede fluir solamente de arriba
hacia abajo. Adems, vlvulas en cada unin controlan cunto petrleo pasa en cada direccin. Sin
importar el estado de las vlvulas el sistema alcanza un punto de equilibrio cuando la cantidad de petrleo
entrando al sistema por la parte superior es igual a la cantidad saliendo por la parte inferior (esta es la
cantidad que queremos maximizar), y cuando la cantidad de petrleo fluyendo hacia cada unin es igual a
la cantidad saliendo de ella. Medimos tanto el flujo como la capacidad de la tubera en trminos de
unidades enteras (por ejemplo, litros por segundo).

No es obvio inmediatamente que la configuracin de las vlvulas pueda afectar realmente el flujo mximo
total. La figura siguiente ilustra que s afecta.

Primero, supongamos que se abre la vlvula que controla el tubo AB, llenando ese tubo, el tubo BD, y casi
llenando DF, como se muestra en el diagrama izquierdo de la figura. A continuacin supongamos que el
tubo AC se abre y la vlvula C se mueve para cerrar el tubo CD y abrir el tubo CE (quizs el operador de la
vlvula D ha informado al operador de la vlvula C que ya no puede aceptar ms debido a la carga desde
B). El flujo resultante se muestra en el diagrama central de la figura: los tubos BD y CE estn llenos. Ahora,


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
20


20
el flujo podra ser incrementado en alguna medida enviando lo suficiente a travs de la trayectoria ACDF
para llenar el tubo DF, pero hay una mejor solucin, como se muestra en el tercer diagrama. Cambiando la
vlvula B para redirigir suficiente flujo para llenar BE, proporcionamos suficiente capacidad en el tubo DF
para permitir a la vlvula C abrir completamente el tubo CD. El flujo total entrando y saliendo de la red se
incrementa encontrando la configuracin adecuada de vlvulas.




Nuestro desafo es desarrollar un algoritmo que pueda encontrar la configuracin apropiada de vlvulas
para cualquier red. Adems, queremos estar seguros que ninguna otra configuracin de vlvulas permitir
un flujo mayor. Esta situacin puede ser modelada por una grfica dirigida.

Definimos una red como una grfica ponderada dirigida con dos vrtices distinguibles: uno sin aristas
apuntando hacia el interior (la fuente) y otro sin aristas apuntando hacia el exterior (el destino). Los pesos
en las aristas, que asumimos como no-negativos, se denominan capacidades de vrtice. Un flujo se
define como otro conjunto de pesos en las aristas de manera que el flujo en cada arista es igual a o menor
que la capacidad, y el flujo entrando en cada vrtice es igual al flujo saliendo de ese vrtice. El valor del
flujo es el flujo de la fuente. El problema del flujo de red es encontrar un flujo con valor mximo para
una red dada.

Las redes pueden ser representadas por medio de la matriz de adyacencia o por la lista de adyacencia que
utilizamos para grficas anteriormente. En lugar de un solo peso, dos pesos estn asociados con cada
arista, el tamao y el flujo. Estos pueden ser representados por dos campos en un vrtice de la lista de
adyacencia, como dos matrices en la matriz de adyacencia, o por dos campos dentro de un solo registro en
cualquier representacin. Aunque las redes son grficas dirigidas, los algoritmos necesitan atravesar las
aristas en la direccin equivocada, as que utilizamos una representacin de grfica no-dirigida: si existe
una arista de x a y con tamao s y flujo f, tambin mantenemos una arista de y a x con tamao s y flujo f.
En una representacin de lista de adyacencia, es necesario mantener enlaces conectando los dos vrtices
de lista que representan cada arista, de manera que cuando cambiemos el flujo en uno podamos
actualizarlo en el otro.

Podemos definir el problema del flujo mximo de una forma ms precisa como sigue.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
21


21

Redes de Flujo y Flujos

Una red de flujo es una grfica dirigida en la cual cada arista tiene una capacidad
no-negativa .

Requerimos adems que si A contiene una arista , entonces no existe una arista en la direccin
inversa.

Si , entonces por conveniencia definimos , y no aceptamos auto-ciclos.

Distinguimos dos vrtices en una red de flujo: una fuente s y un destino t. Por conveniencia, asumimos
que cada vrtice se encuentra en alguna trayectoria de la fuente al destino. Esto es, para cada vrtice
, la red de flujo contiene una trayectoria . La grfica es por lo tanto conexa y, dado que cada
vrtice diferente de s tiene al menos una arista entrante, entonces || || .

Estamos listos ahora para definir los flujos ms formalmente.

Sea una red de flujo con una funcin de capacidad c. Sea s la fuente de la red, y sea t el destino.
Un flujo en G es una funcin con valor real que satisface las siguientes dos propiedades:

Restriccin de la capacidad: Para todo , se requiere .

Conservacin del flujo: Para todo { }, se requiere



Cuando , no puede haber flujo desde u a v, y

Llamamos a la cantidad no-negativa el flujo del vrtice u al vrtice v. El valor || de un flujo f se
define como

||



esto es, el flujo total saliendo de la fuente menos el flujo entrando a la fuente (aqu, la notacin | f | denota
el valor del flujo, no valor absoluto o cardinalidad.) Tpicamente, una red de flujo no tendr aristas hacia la
fuente, y el flujo hacia la fuente dado por la sumatoria



ser 0. Lo incluimos, sin embargo, porque cuando se introducen redes residuales, el flujo hacia la fuente se
vuelve significativo.


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
22


22

En el problema del flujo mximo, se nos da una red de flujo G con fuente s y destino t, y deseamos
encontrar un flujo de valor mximo.

La restriccin de capacidad dice simplemente que el flujo de un vrtice a otro debe ser no-negativo y que
no debe exceder la capacidad dada. La propiedad de conservacin del flujo dice que el flujo total entrando
un vrtice que no sea la fuente o el destino debe ser igual al flujo total saliendo de ese vrtice dicho
informalmente, el flujo de entrada es igual al flujo de salida.


3.2.2. Teorema del corte mnimo y flujo mximo

Teorema. En cualquier red, el flujo mximo que fluye de la fuente al destino, es igual a la
capacidad del corte mnimo que separa a la fuente del destino. Este corte mnimo de
separacin puede no ser nico.

En la figura siguiente se muestra una red de ejemplo que tiene varios cortes, cada uno con capacidad
diferente. El nmero que se muestra junto a cada arista representa su capacidad mxima.


La siguiente tabla contiene los cortes de separacin y sus capacidades.

Aristas en el corte de separacin Capacidad
{SA, SB} 17
{BE, BD, AD, CD, CT} 17
{CT, DT, ET} 16
{BE, CT, DT} Corte mnimo 14

El corte mnimo es el cuarto de la lista con una capacidad de 14 unidades; de acuerdo al teorema, tambin
es el flujo mximo que puede fluir de la fuente al destino. Como puedes ver, la esencia del teorema es
sencilla.

Un artculo de Lester Randolph Ford Jr. y de Delbert Ray Fulkerson (1962) discutiendo el problema del flujo
mximo estableci este famoso teorema. Para definirlo formalmente, necesitaremos de tres conceptos:
redes residuales, trayectorias de aumento, y cortes.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
23


23
Redes Residuales

Dada una red de flujo G y un flujo f, la red residual G
f
consiste de aristas con capacidades que representan
cmo se cambia el flujo en las aristas de G. Una arista de la red puede admitir una cantidad de flujo
adicional igual a la capacidad de la arista menos el flujo en esa arista. Si el valor es positivo, se pone esa
arista G
f
con una capacidad residual de

.

Las nicas aristas de G que estn en G
f
son aquellas que pueden admitir ms flujo; las aristas cuyo flujo
iguala a su capacidad tienen

, y no estn en G
f
.

La red residual G
f
tambin puede contener aristas que no estn en G, sin embargo. A medida que un
algoritmo manipula el flujo, con la meta de incrementar el flujo total, puede necesitar disminuir el flujo en
una arista particular. Para representar una posible disminucin de un flujo positivo en una arista en
G, se pone una arista en G
f
con una capacidad residual

; esto es, una arista que


puede admitir un flujo en la direccin opuesta a , a lo ms cancelando el flujo en .

Estas aristas invertidas en la red residual permiten que un algoritmo devuelva flujo que ya ha enviado por
una arista. El devolver flujo por una arista es equivalente a disminuir su flujo, la cual es una operacin
necesaria en muchos algoritmos.

Ms formalmente, dada una red de flujo G = (V, A) con fuente s y destino t, un flujo f en G, y considerando
un par de vrtices , definimos la capacidad residual

como

{





Trayectorias de Aumento

Dada una red de flujo G = (V, A) y un flujo f, una trayectoria de aumento p es una trayectoria simple de s a
t en la red residual G
f
. Por la definicin de red residual, se puede incrementar el flujo en una arista (u, v) de
una trayectoria de aumento por hasta

sin violar la restriccin de capacidad de (u, v) y (v, u) en la


red original G.

Llamaremos a la mxima cantidad por la cual se puede incrementar el flujo en cada arista en una
trayectoria de aumento p la capacidad residual de p, dada por

}.

Cortes de Redes de Flujo

Un corte (S, T) de una red de flujo G = (V, E) es una particin de V en S y T = V S tal que y . Si
f es un flujo, entonces el flujo neto f(S, T) a travs del corte (S, T) se define como



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
24


24





La capacidad del corte (S, T) es





Un corte mnimo de una red es un corte cuya capacidad es mnima sobre todos los cortes de la red.

La asimetra entre las definiciones de flujo y capacidad de un corte es intencional e importante. Para
capacidad, contamos solamente las capacidades de las aristas que van de S a T, ignorando las aristas en
la direccin opuesta. Para flujo, consideramos el flujo que va de S a T menos el flujo que va en la direccin
opuesta de T a S.

Versin Formal del Teorema del Corte Mnimo y Flujo Mximo

Si f es un flujo en una red de flujo G = (V, E) con fuente s y destino t, entonces las siguientes condiciones
son equivalentes:

1. f es un flujo mximo en G.
2. La red residual G
f
no contiene trayectorias de aumento.
3. || para algn corte de G.

Esto equivale a lo que enunciamos al principio de esta seccin: el valor del flujo mximo es igual a la
capacidad de un corte mnimo. Puedes encontrar todos los desarrollos y demostraciones matemticas de
este teorema en:

Cormen, T., Leiserson, C., Rivest, R., Stein, C. (2009) Introduction to Algorithms. 3rd Ed. The MIT Press.
Cambridge, Massachusetts USA.


3.2.3. Algoritmo de corte mnimo y flujo mximo

Ford y Fulkerson desarrollaron un mtodo para encontrar el flujo mximo alrededor del teorema.
Comenzando con un flujo cero, se aplica el mtodo repetidamente. Mientras que el mtodo pueda ser
aplicado, produce un aumento de flujo; si no puede ser aplicado, el flujo mximo ha sido encontrado.

Examinaremos el mtodo en trminos de la grfica de la siguiente figura.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
25


25



Para simplificar, omitimos las flechas, dado que todas apuntan hacia abajo. El mtodo no est restringido,
por supuesto, a grficas que pueden ser trazadas con todas las aristas apuntando en una direccin.
Usamos estas grficas porque ayudan a entender el flujo de la red en trminos de lquidos fluyendo en
tubos.

Consideremos cualquier trayectoria dirigida (hacia abajo) a travs de la red (de la fuente al destino).
Claramente, el flujo puede ser incrementado por al menos la cantidad ms pequea de la capacidad no
utilizada en cualquier arista de la trayectoria, incrementando el flujo en todas las aristas de la trayectoria por
esa cantidad. En el diagrama izquierdo de la figura, esta regla se aplica a lo largo de la trayectoria ABDF;
luego en el diagrama central, es aplicada a lo largo de la trayectoria ACEF.

Como mencionamos anteriormente, podemos entonces aplicar la regla a lo largo de la trayectoria ACDF,
creando una situacin en la que todas las trayectorias dirigidas a travs de la red tienen al menos una
arista llena hasta su capacidad. Pero existe otra manera de incrementar el flujo: podemos considerar
trayectorias arbitrarias a travs de la red que pueden contener aristas que apuntan en la direccin
equivocada (del destino hacia la fuente a lo largo de la trayectoria). El flujo puede ser aumentado a lo largo
de tal trayectoria aumentando el flujo en aristas de la fuente al destino y disminuyendo el flujo en aristas del
destino a la fuente por la misma cantidad.

En el ejemplo, el flujo a travs de la red puede ser aumentado en 3 a lo largo de la trayectoria ACDBEF,
como se muestra en el tercer diagrama de la figura. Como describimos anteriormente, esto corresponde a
agregar 3 unidades de flujo a travs de AC y CD, luego desviando 3 unidades en la vlvula B de BD a BE y
EF. No perdemos ningn flujo en DF porque 3 de las unidades que venan de BD ahora vienen de CD.

Para simplificar la terminologa, llamaremos a las aristas que fluyen de la fuente al destino a lo largo de una
trayectoria particular aristas hacia adelante, y las aristas que fluyen del destino a la fuente aristas hacia
atrs. Nota que la cantidad por la cual el flujo puede ser aumentado est limitada por el mnimo de las
capacidades no usadas en las aristas hacia adelante y el mnimo de los flujos en las aristas hacia atrs.
Dicho de otra manera, en el nuevo flujo, al menos una de las aristas hacia adelante a lo largo de la
trayectoria se llena o al menos una de las aristas hacia atrs a lo largo de la trayectoria queda vaca.


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
26


26
Adems, el flujo no puede ser incrementado en cualquier trayectoria que contenga una arista hacia delante
llena o una arista hacia atrs vaca.

El prrafo anterior proporciona un mtodo para incrementar el flujo en cualquier red, a condicin de que
una trayectoria sin aristas hacia adelante llenas o aristas hacia atrs vacas pueda encontrarse. El punto
esencial del mtodo es la observacin de que si tal trayectoria no puede ser encontrada entonces el flujo es
mximo.

Propiedad. Si todas las trayectorias de la fuente al destino en una red tienen una arista hacia adelante
llena o una arista haca atrs vaca, entonces el flujo es mximo.

Para probar este hecho, examinamos la grfica e identifiquemos la primera arista hacia adelante llena o
hacia atrs vaca en cada trayectoria. Este conjunto de aristas corta la grfica en dos partes. En este
ejemplo, las aristas AB, CD, y CE conforman el corte. Para cualquier corte de la red en dos partes,
podemos medir el flujo a travs del corte: el total del flujo en las aristas que van de la fuente al destino.

En general, las aristas pueden ir en ambas direcciones a travs del corte: para obtener el flujo a travs del
corte, el total del flujo en las aristas yendo en la otra direccin deben ser restadas. Nuestro corte de
ejemplo tiene un valor de 12, el cual es igual al flujo total para la red. Resulta que cuando el flujo del corte
es igual al flujo total, sabemos no solamente que el flujo es mximo, sino tambin que el corte es mnimo
(esto es, cualquier otro corte tiene al menos un flujo tan alto que lo cruza). Esto corresponde al teorema de
corte mnimo flujo mximo: el flujo no puede ser mayor (de otra manera el corte tendra que ser mayor
tambin), y no existen cortes menores (de otra forma el flujo tendra que ser tambin menor).

El mtodo Ford y Fulkerson puede ser resumido como sigue: empieza con flujo cero por doquier e
incrementa el flujo a lo largo de cualquier trayectoria de la fuente al destino que no tenga aristas hacia
delante llenas o aristas hacia atrs vacas, continuando hasta que no existan tales trayectorias en la red.

Esto no es un algoritmo en el sentido usual, dado que el mtodo para encontrar trayectorias no est
especificado, y cualquier trayectoria puede ser usada.

Por ejemplo, uno puede basar el mtodo en la intuicin que entre ms larga la trayectoria, la red est ms
llena, de manera que las trayectorias largas deberan ser preferidas. Pero el ejemplo clsico que se
muestra en la siguiente figura demuestra que se debe tener cuidado con esto.




Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
27


27

En esta red, si la primera trayectoria escogida es ABCD, entonces el flujo es aumentado en slo 1.
Entonces la segunda trayectoria escogida puede ser ACBD, de nuevo aumentando el flujo en 1, y dejando
una situacin idntica a la situacin inicial, excepto que los flujos en las aristas exteriores son aumentados
en uno. Cualquier algoritmo que escoja estas dos trayectorias (por ejemplo, uno que busque las
trayectorias largas) continuara con esta estrategia, requiriendo 1000 pares de iteraciones antes de que el
flujo mximo sea encontrado. Si los nmeros en los lados fueran un billn, entonces se usaran dos billones
de iteraciones. Obviamente, esta es una situacin indeseable, dado que las trayectorias ABC y ADC dan el
flujo mximo en slo dos pasos. Para que el algoritmo sea til, debemos evitar que el tiempo de ejecucin
sea tan dependiente de la magnitud de las capacidades. Afortunadamente, este problema puede ser
eliminado fcilmente:

Propiedad. Si la trayectoria ms corta disponible de la fuente al destino se utiliza en el mtodo Ford y
Fulkerson, entonces el nmero de trayectorias utilizadas antes de que se encuentre el flujo mximo en una
red de V vrtices y A aristas debe ser menor que VA.

Este hecho fue probado por Edmonds y Karp en 1972.

Para esto se puede utilizar una versin modificada apropiadamente del algoritmo de recorrido en anchura
que mencionamos en la seccin 3.1.2.

Los algoritmos bsicos que usan el mtodo de Ford y Fulkerson estn ampliamente desarrollados por
varios autores. Por ejemplo, en el libro de Heineman, G., Pollice, G., Selkow, S. Algorithms in a Nutshell.
(2009) OReilly Media, Inc. 1st Ed. USA puedes encontrar inclusive el cdigo en Java. Sera un buen
ejercicio que implementaras el algoritmo en tu computadora:


Tambin puedes experimentar interactivamente en estos dos sitios con el algoritmo de Ford y Fulkerson:

http://people.cs.pitt.edu/~kirk/cs1501/animations/Network.html
http://www.cse.yorku.ca/~aaw/Wang/MaxFlowStart.htm

Al principio slo se conocan algoritmos eficientes para el flujo mximo que trabajaban encontrando
trayectorias de aumento, ya sea una trayectoria a la vez (como en el algoritmo original de Ford and
Fulkerson) o todas las trayectorias de aumento de longitud ms corta a la vez (mtodo de Dinic). Ms tarde,
fue introducido un mtodo alternativo basado en el concepto de preflujo de Karzanov, el cual presentamos
desarrollado en la ltima seccin de la unidad.

En este mtodo, para un vrtice fuente s dado y un vrtice destino t, el algoritmo comienza con un preflujo
inicial en el que todas las aristas de s tienen capacidad residual cero, produciendo excesos en los vrtices
adyacentes de s. Los excesos son empujados hacia t, mientras que se satisface la restriccin que el flujo
de entrada debe ser igual al flujo de salida en cada vrtice. Los excesos que no pueden alcanzar el destino
debido a las restricciones de capacidad son regresados a s. El algoritmo termina cuando ya no hay ms
excesos.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
28


28
El algoritmo y su anlisis son simples e intuitivos, aunque el algoritmo se ejecuta tan rpido para grficas
de cualquier densidad como cualquier otro mtodo conocido o ms cuando se incorporan estructuras
dinmicas de datos. Un punto extra a favor es que el algoritmo tambin admite implementaciones
distribuidas y paralelas eficientes, adecuadas para los nuevos entornos de cmputo.

En la seccin 3.4.1. Solucin de Problemas de Redes se presenta el desarrollo de este algoritmo
incluyendo el pseudocdigo y el cdigo en Java del programa, as como una corrida de ejemplo con sus
resultados. Te recomendamos que lo pruebes en tu IDE Eclipse con otros ejemplos que propongas.

El artculo original (en ruso) en el que se presenta este mtodo es el siguiente:

Karzanov, A. V. (1974) Determining a Maximal Flow in a Network by the Method of Preflows. Soviet Math.
Dokl., 15, No.2, 434-437.

Y puede descargarse de: http://alexander-karzanov.net/flows&multiflows.html

Un artculo en ingls que discute detalles del algoritmo y que puede encontrarse en internet es el siguiente:

Goldberg, A., Tarjan, R. (1988) A New Approach to the Maximum-Flow Problem. Journal of the Association
for Computing Machinery, Vol. 35, No. 4.


Actividad 2. Teoremas y algoritmos de flujo


A travs de lo aprendido en la seccin 3.2.3. Algoritmos de corte mnimo y flujo mximo, realiza el
siguiente reporte de investigacin tomando en cuenta el algoritmo de Ford y Fulkerson. Y las instrucciones
mencionadas a continuacin.
Instrucciones

1. Escribe un reporte que llevar por nombre Teoremas y algoritmo de flujo

2. Investiga sobre los siguientes temas:

a. Algoritmo de Ford-Fulkerson.
i. Descripcin.
ii. Pseudocdigo

3. Guarda tu documento con la siguiente nomenclatura MCOM1_U3_A2_XXYZ. Sustituye las XX por
las dos primeras letras de tu primer nombre, la Y por la inicial de tu apellido paterno y la Z por la
inicial de tu apellido materno.

4. Enva tu documento a tu Facilitador(a) y espera su retroalimentacin





Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
29


29
3.3. Conexidad

En una grfica conexa hay al menos una trayectoria entre cada par de sus vrtices. Un vrtice o una arista
tienen la propiedad de destruir la conexidad de la grfica si cuando se elimina uno de los dos, o ambos, la
grfica se convierte en disconexa. Consideremos por ejemplo una red de comunicaciones representada por
la grfica que se muestra en la siguiente figura. Los vrtices corresponden a centros de comunicacin y las
aristas a canales de comunicacin.





Si se elimina el vrtice v, se rompe la comunicacin. Esto implica que en esta red el centro representado
por el vrtice v tiene la propiedad de destruir el sistema de comunicaciones, as que la red depende de la
conexidad.

Conexidad

En el siguiente diagrama, la grfica de la izquierda tiene dos piezas, mientras que la grfica de la derecha
slo tiene una.




Pongamos esta observacin en trminos rigurosos.

Una grfica es conexa si para cada par de vrtices u y v, la grfica contiene una trayectoria con
puntos extremos u y v como sub-grfica.

La grfica de la izquierda no es conexa porque no hay una trayectoria de cualquiera de los tres vrtices
superiores a cualquiera de los dos vrtices inferiores. Sin embargo, la grfica de la derecha es conexa
porque existe una trayectoria entre cada par de vrtices.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
30


30
Una sub-grfica conexa mxima se denomina componente conexo. (Por mxima, queremos decir que el
incluir cualesquiera vrtices adicionales volver disconexa la sub-grfica.) La grfica de la izquierda tiene
dos componentes conexos, el tringulo y la arista independiente. La grfica de la derecha es conexa
completamente as que tiene un solo componente conexo.

Teorema de Conexidad

Cada grfica tiene al menos || || componentes conexos.

Corolario. Toda grfica conexa con n vrtices tiene al menos n-1 aristas.


Conceptos Bsicos

Vrtice de corte: Sea G una grfica con k(G) componentes. Un vrtice v de G es denominado vrtice de
corte de G si . Por ejemplo, en la grfica de la siguiente figura, los vrtices u y v son
vrtices de corte.




Arista de corte: Una arista a de una grfica G es denominada arista de corte si
. En la grfica de la siguiente figura, e y f son aristas de corte.



Las siguientes observaciones son las consecuencias inmediatas de las definiciones anteriores:

1. La remocin de un vrtice puede incrementar el nmero de componentes en una grfica por al
menos uno.
2. Cada vrtice no-colgante de un rbol es un vrtice de corte.
3. La remocin de una arista puede incrementar el nmero de componentes por a lo ms uno.
4. Los vrtices finales de una arista de corte son vrtices de corte si su grado es mayor que uno.


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
31


31

Lo siguiente caracteriza los vrtices de corte:

Si G(V, A) es una grfica conexa, entonces v es un vrtice de corte si existen vrtices {} tales
que cada trayectoria en G pasa a travs de v.

Lo siguiente caracteriza las aristas de corte:

Para una grfica conexa G, las siguientes declaraciones son equivalentes:

a. a es una arista de corte de G.
b. Si , existe una particin del subconjunto de aristas {} para

con

.


3.3.1. Conexidad puntual


La conexidad puntual (o de vrtices) k(G) de una grfica conexa G (que no sea una
grfica completa) es el nmero mnimo de vrtices cuya eliminacin desconecta G.


Recuerda que una grfica completa es una grfica no dirigida en la que se conecta cada par de vrtices
distintos por una arista nica.

Cuando , se dice que la grfica es k-conexa (o k-vrtices conexa). Cuando se elimina un vrtice,
tambin se deben eliminar las aristas que inciden en l.

Por ejemplo, consideremos las siguientes grficas:



La grfica G
1
puede ser desconectada eliminando un solo vrtice (ya sea b o c). Esta grfica tiene una
conexidad puntual de 1.

La grfica G
2
puede ser desconectada eliminando un solo vrtice (ya sea c o d). La grfica tiene una
conexidad puntual de 1.

La grfica G
3
puede ser desconectada eliminando slo un vrtice: el c. La grfica tiene una conexidad
puntual de 1.


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
32


32

La grfica G
4
no puede ser desconectada eliminando un solo vrtice, pero la eliminacin de dos vrtices no
adyacentes (tales como b y c) la desconectan. La grfica tiene una conexidad puntual de 2.


Conjunto de Vrtices de Corte

Un conjunto de vrtices de corte de una grfica conexa es un conjunto S de vrtices con las siguientes
propiedades:

La eliminacin de todos los vrtices en S desconecta G.
La eliminacin de algunos (pero no todos) de los vrtices en S no desconecta G.

Consideremos la siguiente grfica



Podemos desconectar la grfica eliminando los vrtices b y e, pero no podemos desconectarla eliminando
slo uno de ellos. El conjunto de vrtices de corte de G es {b, e}.

Nota que la conexidad puntual k(G) no excede la conexidad lineal (G) (la veremos en la siguiente seccin).
Esto se mantiene para todas las grficas conexas.

Existe una desigualdad entre descubierta por Whitney en 1932 que dio origen al
siguiente teorema:

Teorema. Para toda grfica G conexo, se cumple que



Donde es el grado mnimo de los vrtices en G.

Recuerda que el grado de un vrtice es el nmero de aristas incidentes en el vrtice, con los ciclos
contados dos veces.

Pero es ciertamente posible para ambas desigualdades en la expresin anterior que sean desigualdades
estrictas, esto es



Por ejemplo, en la siguiente grfica


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
33


33




Y la siguiente grfica tiene




3.3.2. Conexidad lineal

La conexidad lineal (o de aristas) (G) de una grfica conexa G es el nmero mnimo
de aristas que cuando son removidas desconectan G.


Cuando , se dice que la grfica G tiene una conexidad lineal k.

Si se tienen, por ejemplo, las siguientes grficas



Su conexidad lineal es como sigue:

G
1
tiene una conexidad lineal de 1
G
2
tiene una conexidad lineal de 1
G
3
tiene una conexidad lineal de 2
G
4
tiene una conexidad lineal de 2

G
1
puede ser desconectado (dividido en dos componentes) removiendo una de las aristas: bc o bd. Estas
aristas son denominadas puente.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
34


34
Puente. Un puente es una sola arista cuya remocin desconecta un grfica.

G
2
puede ser desconectado eliminando una sola arista, cd. Por lo tanto, la arista cd es un puente.

G
3
no puede ser desconectado eliminando una sola arista, pero la remocin de dos aristas (tales como ac y
bc) lo desconecta.

G
4
puede ser desconectado eliminando dos aristas tales como ac y cd.


Conjunto de Aristas de Corte

El conjunto de aristas de corte de una grfica conexa G es un conjunto de aristas S con las siguientes
propiedades:

La eliminacin de todas las aristas en S desconecta G.
La eliminacin de algunas (pero no todas) de las aristas en S no desconecta G.

Consideremos, por ejemplo, la siguiente grfica:



Podemos desconectar G eliminando tres aristas: bd, be, y ce, pero no podemos desconectarlo eliminando
slo dos de ellas. Nota que un conjunto de corte es un conjunto de aristas en el cual ninguna arista es
redundante.

La conexidad lineal para una grfica no conexa es cero, (G) = 0, mientras que si la grfica es conexa y
posee un puente, entonces (G) = 1.

En la seccin 3.4.1. Solucin de Problemas de Redes encontrars el pseudocdigo, el cdigo en Java y
una corrida de ejemplo de un algoritmo que encuentra la conexidad lineal de una grfica conexa no-dirigido
de n vrtices resolviendo n problemas de flujo mximo de red. Te recomendamos que experimentes con l
en tu IDE Eclipse.


3.3.3. Teorema de Menger

Dado que un par determinado de vrtices en una grfica puede ser conectado por muchas trayectorias, es
natural preguntarse cmo puede medirse el grado de conexidad entre ellos.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
35


35
Una manera de medir su conexidad es determinar el mximo nmero de esas trayectorias que son
"independientes" una de otra, esto es, que no comparten otros vrtices considerndolas por pares.
Otra manera de medir su conexidad es determinar el mnimo nmero de vrtices cuya eliminacin
de la grfica destruye todas las trayectorias entre el par de vrtices dado.

El teorema de Menger establece que para cada par de vrtices no adyacentes estas dos medidas son
iguales. Una formulacin equivalente del teorema establece que si V y W son conjuntos de vrtices no
vacos en una grfica, entonces el nmero mximo de trayectorias internamente disjuntas V-W es igual al
nmero mnimo de vrtices cuya eliminacin destruye todas esas trayectorias. Estamos hablando de la
conexidad puntual.

El teorema es un resultado del desarrollo de la conexidad en grficas no-dirigidas. Karl Menger lo demostr
en 1927 para la conexidad puntual, pero tambin para la conexidad lineal. La versin del teorema para la
conexidad lineal fue generalizada ms tarde por un teorema que ya estudiaste: el del corte mnimo flujo
mximo.

Teorema de Menger para la Conexidad Puntual

Sean v y w dos vrtices no adyacentes en una grfica G. Un conjunto S de vrtices es un conjunto de corte
v-w si v y w yacen en componentes diferentes de G S; esto es, si cada trayectoria v-w contiene un vrtice
en S. El orden mnimo de un conjunto de corte v-w es denominado conexidad v-w y es denotado por


Para dos vrtices cualesquiera v y w, una coleccin de trayectorias v-w es considerada internamente
disjunta si las trayectorias son disjuntas por pares, excepto para los vrtices v y w. El nmero mximo de
trayectorias internamente disjuntas v-w se denota por . Dado que cada trayectoria en ese conjunto
debe contener un vrtice diferente de todo conjunto de corte v-w, es claro que .

Dos trayectorias son internamente disjuntas (algunas personas las llaman puntualmente disjuntas o
independientes) si no tienen ningn vrtice en comn, excepto el primero y el ltimo.

Consideremos, por ejemplo, el grfico siguiente




Es fcil verificar que tanto como son 3. El que ambos parmetros sean iguales en este caso
no es coincidencia, y el hecho de que esto es cierto en general es el contenido de una versin del teorema
de Menger. Comprueba el resultado encontrando las tres trayectorias que no tienen vrtices en comn


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
36


36
excepto el inicial y el final, y un conjunto de corte puntual que contiene al menos tres vrtices y separa la
grfica al eliminarlos (no encontrars un conjunto que contenga menos de tres vrtices).

Teorema de Menger para la Conexidad Puntual. Si v y w son vrtices no adyacentes en una grfica G,
entonces el nmero mximo de trayectorias internamente disjuntas v-w es igual al nmero de vrtices de
un conjunto mnimo de corte v-w.

Teorema de Menger para la Conexidad Lineal

La versin puntual del teorema de Menger discutida en la seccin anterior tiene analogas para el caso de
la conexidad lineal. Sean v y w dos vrtices en una grfica G. Un conjunto S de aristas es un conjunto de
aristas de corte v-w si v y w estn en componentes diferentes de G S; esto es, si cada trayectoria v-w
contiene una arista de S. La mxima cardinalidad de un conjunto de corte lineal v-w es la conexidad lineal v-
w y es denotada por .

El mximo nmero de trayectorias lineales disjuntas v-w en G se denota por . Dado que cada una de
tales trayectorias debe contener una arista de cada conjunto de corte lineal v-w, .

Dos trayectorias son linealmente disjuntas si no tienen ninguna arista en comn.

Por ejemplo, consideremos de nuevo la siguiente grfica




Es fcil ver que tanto como son 5. El que los dos parmetros sean iguales en este caso no
es de nuevo, una mera coincidencia, y el hecho que esto es cierto en general es la versin local lineal del
teorema de Menger. Comprueba el resultado encontrando las cinco trayectorias que no tienen aristas en
comn, y un conjunto de corte lineal que contiene al menos cinco aristas y separa la grfica al eliminarlas
(no encontrars un conjunto que contenga menos de cinco aristas).

Teorema de Menger para la Conexidad Lineal. Para cualesquiera vrtices v y w en una grfica G,
.


3.4. Programacin

En esta seccin presentamos el desarrollo completo de dos algoritmos: uno que resuelve el problema del
flujo mximo en una red, y el otro que encuentra la conexidad lineal de una grfica. Encontrars tanto el
pseudocdigo como el cdigo en Java que puedes probar en tu entorno IDE Eclipse.


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
37


37
3.4.1. Solucin de problemas de redes

1. Teorema del Corte Mnimo y Flujo Mximo

Pseudocdigo:

Paso 1.

Flujo mximo y corte mnimo.

Paso 2.

Entradas: El nmero de vrtices vertice y el nmero de aristas aristas, vrtice de inicio o fuente fuente
y el vrtice final, sumidero o destino destino, valores de la red: vrtices de p[ ] a q[ ]; la capacidad de
cada arista cap[ ].

Salidas: cantidad de flujo de cada vrtice flujovertice[], cantidad de flujo por cada arista flujoarista[],
vrtices del corte mnimo cortemin[].

1. Inicio.
2. Inicializacin de variables
cortemin[vertice+1] 0
flujovertice[vertice+1] 0
flujoarista[aristas+aristas+1] 0
primarista[vertice+1] 0
mapeoi[vertice+1] 0
mapeoj[vertice+1] 0
flujo 0, aux 0, aristas2 0, NY 0, i 0, j 0
entrada 0, salida 0, parm 0, aristas1 0, cont1 0, cont2 0
fin 0, NP 0, NQ 0, NU 0, NV 0, NW 0, NX 0
termino false, A false, B false, C false, G false
D false, E false, F false.
3. Se empieza con un preflujo en donde las aristas de la fuente tienen una capacidad residual de cero,
produciendo excesos en los vrtices adyacentes a la fuente.
4. Mientras el flujo de entrada sea igual al flujo de salida del vrtice
Los excesos son conducidos hasta el destino
Si los excesos no alcanzan a llegar al destino, son regresados a la fuente.
5. Si ya no hay excesos.
Fin.
6. Fin.

Ejemplo:



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
38


38


Solucin (Programa en Java):

package maxflow;
public class Test extends Object{
public static void main(String args[]) {
int vertice = 11, aristas = 18;
int fuente = 1, destino = 11;

//para p,q y cap, la cantidad de datos esta dada por: 2*aristas+1
int p[] = {0, 1, 1, 1, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 7, 8, 9, 10,
10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int q[] = {0, 2, 3, 4, 5, 2, 5, 7, 6, 7, 9, 8, 9, 7, 10, 11, 8, 9,
11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int cap[] = {0, 6, 8, 4, 8, 3, 2, 14, 3, 10, 1, 10, 10, 12, 6, 8, 9, 10,
12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

int cortemin[] = new int[vertice+1];
int flujovertice[] = new int[vertice+1];
int flujoarista[] = new int[aristas+aristas+1];

Maxflow.FlujoMaxCorteMin(vertice,aristas,p,q,cap,fuente,destino,cortemin,flujoarista,
flujovertice);
System.out.print("Vrtices del corte mnimo: ");

for (int i = 1; i <= vertice; i++)
if (cortemin[i] == 1)
System.out.print(" " + i);

System.out.println("\n\nCantidad de flujo por cada uno de los vrtices:" +
"\n\n Vertice flujo");

for (int i = 1; i <= vertice; i++)
System.out.printf("%4d%7d\n",i,flujovertice[i]);

System.out.println("\nCantidad de flujo por cada una de las aristas:\n\n de hasta flujo");

for (int i = 1; i <= flujoarista[0]; i++)
System.out.printf("%2d%6d%7d\n",p[i],q[i],flujoarista[i]);
System.out.print("\nNOTA: En aquellas aristas que no aparecen, el flujo es cero (0)");
}


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
39


39
}
////////////////////////////////////////////////////////////////////////////////////////
package maxflow;
public class Maxflow {
//valores de retorno
public static void FlujoMaxCorteMin(int vertice, int aristas, int p[],
int q[], int cap[], int fuente, int destino,
int cortemin[], int flujoarista[], int flujovertice[]){
int primarista[] = new int[vertice+1];
int mapeoi[] = new int[vertice+1];
int mapeoj[] = new int[vertice+1];
int flujo, aux, aristas2, NY, i, j;
int entrada = 0, salida = 0, parm = 0, aristas1 = 0, cont1 = 0, cont2 = 0;
int fin = 0, NP = 0, NQ = 0, NU = 0, NV = 0, NW = 0, NX = 0;
boolean termino, A, B, C, G;
boolean D = false, E = false, F = false;

// Creacin de aristas sustitutas
j = aristas;
for (i = 1; i <= aristas; i++) {
j++;
p[aristas+i] = q[i];
q[aristas+i] = p[i];
cap[aristas+i] = 0;
}
aristas = aristas + aristas;

// Inicializacin
for (i = 1; i <= vertice; i++)
primarista[i] = 0;
flujo = 0;
for (i = 1; i <= aristas; i++) {
flujoarista[i] = 0;
j = p[i];
if (j == fuente)
flujo += cap[i];
primarista[j]++;
}
flujovertice[fuente] = flujo;
NY = 1;

for (i = 1; i <= vertice; i++) {
j = primarista[i];
primarista[i] = NY;
mapeoi[i] = NY;
NY += j;
}
termino = false;
A = true;

// Ordenamiento de aristas en orden lexicogrfico
etiqueta1:

while (true) {
aux = 0;
B = false;
etiqueta2:


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
40


40
while (true) {
if (!B) {
if ((aux < 0) && A) {
if (aux != -1) {
if (NY < 0) NP++;
NQ = cont2;
cont2 = NP;
aux = -1;
}
else {
if (NY <= 0) {
if (cont1 > 1) {
cont1--;
cont2 = cont1;
A = false;
continue etiqueta2;
}
if (aristas1 == 1)
aux = 0;
else {
NP = aristas1;
aristas1--;
NQ = 1;
aux = 1;
}
}
else
aux = 2;
}
}
else {
if (A)
if (aux > 0) {
if (aux <= 1) cont2 = cont1;
A = false;
}
if (A) {
aristas1 = aristas;
cont1 = 1 + aristas / 2;
cont1--;
cont2 = cont1;
}
A = true;
NP = cont2 + cont2;
if (NP < aristas1) {
NQ = NP + 1;
aux = -2;
}
else {
if (NP == aristas1) {
NQ = cont2;
cont2 = NP;
aux = -1;
}
else {
if (cont1 > 1) {
cont1--;


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
41


41
cont2 = cont1;
A = false;
continue etiqueta2;
}
if (aristas1 == 1)
aux = 0;
else {
NP = aristas1;
aristas1--;
NQ = 1;
aux = 1;
}
}
}
}
}
G = false;
C = false;
if ((aux < 0) && !B) {
NY = p[NP] - p[NQ];
if (NY == 0) NY = q[NP] - q[NQ];
continue etiqueta2;
}
else {
if ((aux > 0) || B) {
// intercambio de dos aristas
B = false;
NY = p[NP];
p[NP] = p[NQ];
p[NQ] = NY;
flujo = cap[NP];
cap[NP] = cap[NQ];
cap[NQ] = flujo;
NY = q[NP];
q[NP] = q[NQ];
q[NQ] = NY;
flujo = flujoarista[NP];
flujoarista[NP] = flujoarista[NQ];
flujoarista[NQ] = flujo;
if (aux > 0)
continue etiqueta2;
if (aux == 0) {
C = true;
}
else {
mapeoj[NV] = NQ;
G = true;
}
}
else
if (termino) {
//Obtencin del flujo mximo en cada arista
j = 0;
for (i = 1; i <= aristas; i++)
if (flujoarista[i] > 0) {
j++;
p[j] = p[i];


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
42


42
q[j] = q[i];
flujoarista[j] = flujoarista[i];
}
flujoarista[0] = j;
return;
}
}
if (!G && !C) {
//Realiza el cruce de referencias entre aristas
for (i = 1; i <= aristas; i++) {
NV = q[i];
p[i] = mapeoi[NV];
mapeoi[NV]++;
}
}
etiqueta3:
while (true) {
if (!G) {
if (!C) {
aux = 0;
for (i = 1; i <= vertice; i++) {
if (i != fuente)
flujovertice[i] = 0;
mapeoj[i] = aristas + 1;
if (i < vertice) mapeoj[i] = primarista[i + 1];
cortemin[i] = 0;
}
entrada = 0;
salida = 1;
mapeoi[1] = fuente;
cortemin[fuente] = -1;
while (true) {
entrada++;
if (entrada > salida)
break;
NU = mapeoi[entrada];
aristas2 = mapeoj[NU] - 1;
fin = primarista[NU] - 1;
while (true) {
fin++;
if (fin > aristas2)
break;
NV = q[fin];
flujo = cap[fin] - flujoarista[fin];
if ((cortemin[NV] != 0) || (flujo == 0))
continue;
if (NV != destino) {
salida++;
mapeoi[salida] = NV;
}
cortemin[NV] = -1;
}
}
if (cortemin[destino] == 0) {
// Salidas
for (i = 1; i <= vertice; i++)
cortemin[i] = -cortemin[i];


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
43


43
for (i=1; i<=aristas; i++) {
NU = q[p[i]];
if (flujoarista[i] < 0)
flujovertice[NU] -= flujoarista[i];
p[i] = NU;
}
flujovertice[fuente] = flujovertice[destino];
termino = true;
continue etiqueta1;
}
cortemin[destino] = 1;
}
while (true) {
if (!C) {
entrada--;
if (entrada == 0)
break;
NU = mapeoi[entrada];
NP = primarista[NU] - 1;
NQ = mapeoj[NU] - 1;
}
C = false;
while (NP != NQ) {
NV = q[NQ];
if ((cortemin[NV] <= 0) ||(cap[NQ] == flujoarista[NQ])) {
NQ--;
continue;
}
else {
q[NQ] = -NV;
cap[NQ] -= flujoarista[NQ];
flujoarista[NQ] = 0;
NP++;
if (NP < NQ) {
p[p[NP]] = NQ;
p[p[NQ]] = NP;
B = true;
continue etiqueta2;
}
break;
}
}
if (NP >= primarista[NU])
cortemin[NU] = NP;
}
NW = 0;
for (i=1; i<=salida; i++)
if (cortemin[mapeoi[i]] > 0) {
NW++;
mapeoi[NW] = mapeoi[i];
}
// Encuentra el flujo ms factible
aux = -1;
NX = 1;
}
etiqueta4:
while (true) {


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
44


44
if (!G) {
if (!F) {
if (!D && !E)
NU = mapeoi[NX];
if ((flujovertice[NU] <= 0) || D || E) {
if (!E) {
D = false;
NX++;
if (NX <= NW) continue etiqueta4;
parm = 0;
}
E = false;
NX--;
if (NX != 1) {
NU = mapeoi[NX];
if (flujovertice[NU] < 0) {
E = true;
continue etiqueta4;
}
if (flujovertice[NU] == 0) {
//Flujos acumulados
aristas2 = aristas + 1;
if (NU < vertice)
aristas2 = primarista[NU + 1];
fin = mapeoj[NU];
mapeoj[NU] = aristas2;
while (true) {
if (fin == aristas2) {
E = true;
continue etiqueta4;
}
j = p[fin];
flujo = flujoarista[j];
flujoarista[j] = 0;
cap[j] -= flujo;
flujoarista[fin] -= flujo;
fin++;
}
}
if (primarista[NU] > cortemin[NU]) {
fin = mapeoj[NU];
do {
j = p[fin];
flujo = flujoarista[j];
if (flujovertice[NU] < flujo)
flujo = flujovertice[NU];
flujoarista[j] -= flujo;
flujovertice[NU] -= flujo;
NV = q[fin];
flujovertice[NV] += flujo;
fin++;
}
while (flujovertice[NU] > 0);
flujovertice[NU] = -1;
E = true;
continue etiqueta4;
}


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
45


45
fin = cortemin[NU] + 1;
F = true;
continue etiqueta4;
}
for (i = 1; i <= aristas; i++) {
NV = -q[i];
if (NV >= 0) {
q[i] = NV;
j = p[i];
cap[i] -= flujoarista[j];
flujo = flujoarista[i] - flujoarista[j];
flujoarista[i] = flujo;
flujoarista[j] = -flujo;
}
}
continue etiqueta3;
}
// Se da el flujo mximo a la arista saliente del vertice
fin = cortemin[NU] + 1;
}
}
while (true) {
if (!G) {
F = false;
fin--;
if (fin < primarista[NU])
break;
NV = -q[fin];
if (flujovertice[NV] < 0)
continue;
flujo = cap[fin] - flujoarista[fin];
if (flujovertice[NU] < flujo)
flujo = flujovertice[NU];
flujoarista[fin] += flujo;
flujovertice[NU] -= flujo;
flujovertice[NV] += flujo;
parm = 1;
NP = p[fin];
NQ = mapeoj[NV] - 1;
if (NP < NQ) {
p[p[NP]] = NQ;
p[p[NQ]] = NP;
B = true;
continue etiqueta2;
}
if (NP == NQ)
mapeoj[NV] = NQ;
}
G = false;
if (flujovertice[NU] > 0)
continue;
if (cap[fin] == flujoarista[fin]) fin--;
break;
}
cortemin[NU] = fin;
if (parm != 0) {
D = true;


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
46


46
continue etiqueta4;
}
//Se eliminan los excesos de flujo entrantes de los vertices
fin = mapeoj[NU];
do {
j = p[fin];
flujo = flujoarista[j];
if (flujovertice[NU] < flujo) flujo = flujovertice[NU];
flujoarista[j] -= flujo;
flujovertice[NU] -= flujo;
NV = q[fin];
flujovertice[NV] += flujo;
fin++;
} while (flujovertice[NU] > 0);
flujovertice[NU] = -1;
E = true;
continue etiqueta4;
} } } } } }


Resultado:



Vrtices del corte mnimo: 1 2 3 4 5 6 7 8 9

Cantidad de flujo por cada uno de los vrtices:

Vertice flujo
1 14
2 6
3 5
4 3
5 8
6 0
7 6
8 8
9 0
Consola


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
47


47
10 6
11 14

Cantidad de flujo por cada una de las aristas:

de hasta flujo
1 2 6
1 3 5
1 4 3
2 5 6
3 5 2
3 7 3
4 7 3
5 8 8
7 10 6
8 11 8
10 11 6

NOTA: En aquellas aristas que no aparecen, el flujo es cero (0)


2. Conexidad Lineal

Pseudocdigo:

Paso 1.

Conexidad lineal de una grfica.

Paso 2.

Entradas: El nmero de vrtices vertice y el nmero de aristas aristas, valores de la red: vrtices de p[ ]
a q[ ].
Salidas: La conexidad lineal conex de la grfica.
1. Inicio.
2. Inicializacin de variables
i 0, j 0, destino 0
cortemin[vertice+1] 0
aristai[4*aristas+1] 0
aristaj[4*aristas+1] 0
cap[4*aristas+1] 0
flujoaristas[4*aristas+1] 0
flujovertice[4*aristas+1] 0
conex vertice
fuente 1 // Toma el vrtice 1 como la fuente


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
48


48
aristas2 aristas + aristas.
3. for j=2 vertice
Toma el vertice j como el destino
Asigna una capacidad unitaria a todas las aristas para ambas direcciones
Encuentra el valor del flujo mximo f(j) resultante en la grfica
end-for.
4. La conexidad lineal es igual al nmero mnimo de f(j) para j=2vertice.
5. Fin.

Ejemplo:




Solucin (Programa en Java):

package maxflow;
public class Prueba_ConexidadLineal extends Object{
public static void main(String args[]) {
int conex;
int vertice = 7;
int aristas = 12;
int p[] = {0,4,6,4,3,6,3,2,6,2,1,3,2};
int q[] = {0,7,4,5,7,3,5,7,2,5,4,1,1};
conex = Conexidad.ConexidadLineal(vertice,aristas,p,q);
System.out.println("La conexidad lineal de la grfica G es = " + conex);
}
}
////////////////////////////////////////////////////////////////////////////////
package maxflow;

public class Conexidad {
public static int ConexidadLineal(int vertice, int aristas, int p[], int q[]){
int i,j,conex,aristas2,fuente,destino;
int cortemin[] = new int[vertice+1];
int aristai[] = new int[4*aristas+1];
int aristaj[] = new int[4*aristas+1];
int cap[] = new int[4*aristas+1];
int flujoaristas[] = new int[4*aristas+1];
int flujovertice[] = new int[4*aristas+1];
conex = vertice;


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
49


49
fuente = 1;
aristas2 = aristas + aristas;
for (destino = 2; destino <= vertice; destino++) {
// Construir la red
for (i = 1; i <= 4*aristas; i++) {
aristai[i] = 0;
aristaj[i] = 0;
cap[i] = 0;
}
// Ducplicado de aristas
j = 0;
for (i = 1; i <= aristas; i++) {
j++;
aristai[j] = p[i];
aristaj[j] = q[i];
cap[j] = 1;
j++;
aristai[j] = q[i];
aristaj[j] = p[i];
cap[j] = 1;
}
// Manda llamar el algoritmo de flujo mximo
Maxflow.FlujoMaxCorteMin(vertice,aristas2,aristai,aristaj,cap,fuente,destino,cortemin,fluj
oaristas,flujovertice);
if (flujovertice[fuente] < conex) conex = flujovertice[fuente];
}
return conex;
}
}

La conexidad lineal de la grfica G es = 3
Consola

Actividad 3. Anlisis de conexidad

Al finalizar esta actividad sers capaz de analizar grficas para determinar su conexidad.

Instrucciones: resuelve cada uno de los problemas planteados de acuerdo a los lineamientos que se
solicitan en cada uno de ellos.

1. Descarga el documento llamado Act. 3. Anlisis de conexidad

2. Resuelve cada uno de los problemas que ah se presentan.

3. Guarda tu documento con la siguiente nomenclatura MCOM1_U3_A3_XXYZ. Sustituye las XX por
las dos primeras letras de tu primer nombre, la Y por la inicial de tu apellido paterno y la Z por la
inicial de tu apellido materno.
4. Enva tu documento a tu Facilitador(a) y espera su retroalimentacin
5.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
50


50




Autoevaluacin

Es momento que realices la autoevaluacin, donde podrs medir el nivel de conocimiento adquirido
durante la unidad.

Instrucciones: elige la respuesta correcta que corresponda a la pregunta planteada.


1. Cul es la secuencia de vrtices en la que cada par consecutivo est conectado?
a) Arista b) Trayectoria c) Grfica d) Red

2. Si para cada par de vrtices existe una trayectoria entre ellos, se dice que la grfica es
a) Completa b) Cclica c) Conexa d) Ciclo

3. El problema del flujo de una red consiste en
a) Encontrar el
flujo mximo
para la red
b) Encontrar el
flujo mnimo
para la red
c) Encontrar la
trayectoria de
flujo ms
corta
d) Encontrar la
grfica que
representa a
la red

4. Un conjunto de componentes conexos forma una grfica
a) Conexa b) Cclica c) No dirigida d) Disconexa

5. El mtodo Ford y Fulkerson empieza considerando
a) Un flujo
mximo
b) Un flujo cero
c) Todas las
aristas llenas
d) Cortes
mximos
Para comparar tus respuestas, revisa el documento Respuestas_autoevaluacin_U3, ubicada en la
pestaa material de apoyo.

RETROALIMENTACION

1-3 aciertos. Los conocimientos obtenidos no fueron suficientes, debes revisar nuevamente el contenido
de la unidad.
4-5 aciertos. Tienes un conocimiento claro de los conceptos manejados en la Unidad. Sigue adelante!.



Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
51


51
Evidencia de Aprendizaje. programacin de algoritmos para resolver problemas de
redes

Al finalizar esta actividad sers capaz de aplicar el teorema del corte mnimo flujo mximo para encontrar
el flujo mximo que puede fluir por una red y obtendrs una herramienta para determinar si dos matrices
de adyacencia representan una misma grfica.


1. Descarga el documento llamado EA_Presentacin de resultados

2. Resuelve los problemas que se plantean en el documento descargable

3. Guarda tu documento con la nomenclatura MCOM1_U3_EA_XXYZ. Y enva tu archivo al Portafolio
de Evidencias. Recuerda sustituir las XX por las dos primeras de tu primer nombre, la Y por la
inicial de tu apellido paterno y la por la inicial de tu apellido materno.

4. Espera la retroalimentacin de tu Facilitador(a), atiende sus comentarios y reenva la nueva
versin de tu evidencia, en caso de que sea requerido.

5. Consulta la Escala de Evaluacin para conocer los criterios con que ser evaluado tu trabajo.


Cierre de la Unidad

Pudiste comprobar que las redes aparecen en casi cualquier rea del quehacer humano, desde los
circuitos elctricos hasta las redes sociales, y requieren soluciones para sus problemas. En esta unidad
tuviste la oportunidad de aprender los fundamentos de las redes que te permiten analizarlas y proponer
soluciones a sus problemas de flujo.

Comprobaste tambin que la teora de grficas aporta una plataforma para representar las redes en el
mbito matemtico. Aprendiste conceptos, teoremas y algoritmos para computadora alrededor de esta
teora que te ayudan a resolver problemas de las representaciones de las redes.

Aprendiste conceptos, mtodos y algoritmos que te permiten analizar la conexidad de las grficas.
Finalmente conociste el cdigo ejecutable en una computadora de algoritmos relacionados con grficas y
flujo en redes.


Para saber ms

Consulta los siguientes links:

Acerca de algoritmos de corte mnimo flujo mximo:

http://people.cs.pitt.edu/~kirk/cs1501/animations/Network.html


Programa desarrollado
Unidad 3. Redes
Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas
52


52
http://www.cse.yorku.ca/~aaw/Wang/MaxFlowStart.htm

Acerca de flujo en redes de transporte: cb.mty.itesm.mx/tc1003/lecturas/tc1003-117.pdf

Acerca de representaciones, redes y flujos:

http://polimedia.upv.es/catalogo/mobile/curso.asp?curso=615b1ab8-bf46-294f-a53a-457977bfea87


Fuentes de consulta


Cormen, T., Leiserson, C., Rivest, R., Stein, C. (2009) Introduction to Algorithms. 3rd Ed. The MIT
Press. Cambridge, Massachusetts USA.
Heineman, G., Pollice, G., Selkow, S. Algorithms in a Nutshell. (2009) OReilly Media, Inc. 1st Ed.
USA.
Karzanov, A. V. (1974) Determining a Maximal Flow in a Network by the Method of Preflows. Soviet
Math. Dokl., 15, No.2, 434-437. (http://alexander-karzanov.net/flows&multiflows.html)
Goldberg, A., Tarjan, R. (1988) A New Approach to the Maximum-Flow Problem. Journal of the
Association for Computing Machinery, Vol. 35, No. 4.
Gross, J., Yellen, J. (2006). Graph Theory and Its Applications. Chapman & Hall/CRC Press. 2nd Ed.
USA.

Potrebbero piacerti anche