Está en la página 1de 248

Manual de algortmica

MANUAL DE ALGORTMICA

Proyecto fin de carrera Escuela Tcnica Superior de Ingeniera Informtica Departamento Matemticas Aplicadas I Tutor: Alberto Mrquez Prez

Borrego Ropero, Rafael


rafaborrego@gmail.com Recio Domnguez, Daniel danird@gmail.com

Borrego Ropero Rafael Recio Domnguez Daniel

1 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

2 de 248

Manual de algortmica

1.- Introduccin................................................................................................... 6 2.- Conceptos generales. ................................................................................... 8 Grafos, tipos, ejemplos................................................................................ 8 Algunas definiciones. ................................................................................ 12 Algunos grafos bsicos. ............................................................................ 17 Tipos de rutas ........................................................................................... 46 Grafo complementario............................................................................... 48 Grafo de lnea. .......................................................................................... 50 3.- Algoritmos implementados. ......................................................................... 54 3.1.- Algoritmos sobre caminos mnimos. ..................................................... 54 Algoritmo de Dijkstra. ................................................................................ 54 Algoritmo de Floyd. ................................................................................... 61 3.2.- Algoritmos de distancias....................................................................... 65 Excentricidad de un vrtice. ...................................................................... 65 Radio de un grafo...................................................................................... 67 Dimetro de un grafo................................................................................. 69 Distancia de un vrtice. ............................................................................. 70 Algoritmo de la mediana............................................................................ 72 Algoritmo del centro. ................................................................................. 73 3.3.- Conectividad......................................................................................... 75 Algoritmo de componentes conexas. ........................................................ 75 Vrtices de corte. ...................................................................................... 77 Aristas puente. .......................................................................................... 78 Bloques. .................................................................................................... 79 3.4.- Algoritmos de bsquedas. .................................................................... 88 Bsqueda en profundidad (DFS) .............................................................. 88 Bsqueda en anchura (BFS) .................................................................... 90 3.5.- rboles recubridores de peso mnimo. ................................................. 92 Algoritmo de Boruvka. ............................................................................... 92 Algoritmo de Prim...................................................................................... 98 Algoritmo de Kruskal. .............................................................................. 100 3.6.- Prufer.................................................................................................. 103 Algoritmo de codificacin. ....................................................................... 103 Algoritmo de decodificacin. ................................................................... 110 3.7.- Algoritmo de emparejamientos ........................................................... 120 Algoritmo de emparejamiento maximal simple........................................ 121 Algoritmo de Kuhn-Munkres.................................................................... 128 Algoritmo de Kuhn-Munkres con preprocesamiento (peso mnimo)........ 142 Algoritmo de emparejamiento maximal de peso ptimo.......................... 146 3.8.- Euler ................................................................................................... 157 Es euleriano ?. ..................................................................................... 157 3.9.- Algoritmos de bsqueda de trayectorias eulerianas. .......................... 162 Algoritmo de Fleury ................................................................................. 162 Algoritmo de Tucker. ............................................................................... 183 Algoritmo de Hierholzer........................................................................... 201 Problema del cartero ............................................................................... 205 3.10.- Algoritmos de vrtice coloracin....................................................... 212 Algoritmo de coloracin Secuencial o Voraz. .......................................... 213

Borrego Ropero Rafael Recio Domnguez Daniel

3 de 248

Manual de algortmica Algoritmo de coloracin Welsh-Powell .................................................... 215 Algoritmo de coloracin Matula-Marble-Isaacson ................................... 216 Algoritmo de coloracin de Brelaz........................................................... 217 Es bipartito? .......................................................................................... 221 3.11.- Algoritmos de aristas coloracin....................................................... 225 Algoritmo basado en rellenar un cuadrado latino .................................... 225 Algoritmo basado en emparejamientos maximales................................. 228 3.-12.- Hamilton .......................................................................................... 235 Algoritmo de Dirac................................................................................... 235 Bsqueda de trayectorias hamiltonianas................................................. 239 4.- Bibliografa ................................................................................................ 248

Borrego Ropero Rafael Recio Domnguez Daniel

4 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

5 de 248

Manual de algortmica

1.- Introduccin.
Nos encontramos ante una aplicacin desarrollada para el departamento de matemtica aplicada I con el objetivo de proporcionar una herramienta que ayude al desarrollo de las prcticas de las asignaturas dedicadas al estudio de los grafos y la investigacin. La aplicacin desarrollada tiene como objetivos mejorar algunos aspectos de la aplicacin Algraf la cual ha sido punto de partida de este proyecto por lo que se mantiene la compatibilidad con versiones anteriores. La aplicacin resuelve todos los problemas recogidos en versiones anteriores de Algraf y se han incluido algunos nuevos por los que ahora la aplicacin da solucin a gran cantidad de problemas entre los que podemos destacar.

- Problema de rutas. - Problemas de ubicacin. - Problemas de compatibilidades o coloracin. - Problemas de minimizacin de costes. - Problemas de emparejamientos.

Los conceptos expuestos a continuacin estn enfocados a la comprensin nica y exclusivamente a los algoritmos desarrollados para la aplicacin. Se ha pretendido que sea un manual autocontenido por lo que cualquier concepto necesario para entender de los algoritmos o funcionamiento de la aplicacin est debidamente explicado.

Borrego Ropero Rafael Recio Domnguez Daniel

6 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

7 de 248

Manual de algortmica

2.- Conceptos generales.


Grafos, tipos, ejemplos.

Un grafo G es un conjunto finito, no vaco de vrtices V(G) y un conjunto de aritas E(G) que puede ser vaco formado por pares no ordenados de elementos pertenecientes a V(G). Solo se establecer un orden cuado hablemos de grafos dirigidos y a las aristas se las denomina arcos. Ejemplo de grafo no dirigido.

La matriz de adyacencias del grafo es simtrica respecto a la diagonal principal por ser no dirigido. v 1 1 1 v2 1 1 1 1 v3 1 1 v4 1 1 1 v5 1 1 1 v6 1 v7 1

v7 v1 v2 v3 v4 v5 v6

Borrego Ropero Rafael Recio Domnguez Daniel

8 de 248

Manual de algortmica Si dos o ms aristas unen el mismo par de vrtices se llaman aristas paralelas y en este caso tenemos un multigrafo. Si una arista une un mismo vrtice se trata de un lazo o bucle. Si en un grafo se permite aristas paralelas y bucles obtenemos un seudografo.

Ejemplo de grafo dirigido.

Matriz de adyacencias del grafo. v1 1 1 v2 1 v3 1 1 v4 1 1 v5 1

v1 v2 v3 v4 v5

Borrego Ropero Rafael Recio Domnguez Daniel

9 de 248

Manual de algortmica Un grafo es ponderado si cada arista lleva asociada una magnitud, longitud, dificultad al recorrerla Ejemplo de grafo ponderado no dirigido.

La matriz de adyacencias del grafo es simtrica respecto a la diagonal principal por ser no dirigido. v1 3 5 2 v2 3 3 6 1 v3 3 1 2 v4 6 1 1 v5 5 1 1 v6 2 v7 2

v1 v2 v3 v4 v5 v6 v7

Borrego Ropero Rafael Recio Domnguez Daniel

10 de 248

Manual de algortmica Ejemplo de grafo ponderado dirigido.

Matriz de adyacencias.

v1 v2 v3 v4 v5 v6 v7 v8

v1

v2 2

v3 3

v4 1

v5 1

v6 1 1

v7 1

v8 4 2

Si G es un grafo no dirigido y e = uv es una arista de G diremos que u es adyacente a v o que v es adyacente a u o e une u y v, e incide en v y u. En caso de tratarse de un grafo dirigido diremos que u es adyacente a v y v es adyacente desde u. El arco (u, v) es incidente desde u e incidente hacia v.

Borrego Ropero Rafael Recio Domnguez Daniel

11 de 248

Manual de algortmica

Algunas definiciones.

Tamao y orden de un grafo. El orden de un grafo G es el nmero de vrtices del grafo y tamao es el nmero de aristas. p = orden (G) = | V (G) |. q = tamao (G) = | E (G) |.

Valencia o grado de un vrtice v. En un grafo no dirigido el grado de un vrtice v es el nmero de aristas que inciden en l o nmero de vrtices adyacentes. En grafos dirigidos se distingue entre grado de entrada y salida del vrtice. El grado de entrada de v se define como el nmero de vrtices adyacentes y el grado de salida de v es el nmero de vrtices adyacentes hacia el v o nmero de vrtices que apuntan a v.

Subgrafo. Un grafo H es subgrafo de un grafo G si V(H) V(G). Ejemplo.

Borrego Ropero Rafael Recio Domnguez Daniel

12 de 248

Manual de algortmica Subgrafo H.

No es un subgrafo.

Borrego Ropero Rafael Recio Domnguez Daniel

13 de 248

Manual de algortmica Subgrafo inducido por vrtices.

Sea S un conjunto de vrtices no vaco de un grafo G. El subgrafo inducido por S es el subgrafo maximal de G con vrtices en el conjunto S. Al conjunto de aristas lo denotaremos por <S>. En <S> estn todas las aristas de G que unen dos vrtices de S. Un subgrafo H es subgrafo inducido por vrtices si existe S V (G) tal que H = <S>. Ejemplo

Borrego Ropero Rafael Recio Domnguez Daniel

14 de 248

Manual de algortmica Subgrafo inducido por lo vrtices {v1, v4, v5, v6}.

Subgrafo inducido por aristas.

Sea X un conjunto no vaci de aristas de G. El subgrafo inducido por X es el subgrafo mnimo de G con X el conjunto de aristas y <X> el conjunto de vrtices. En <X> estn todos los vrtices incidentes con alguna arista de X. Un subgrafo es subgrafo inducido por aristas si H = <X> para algn X E (G).

Borrego Ropero Rafael Recio Domnguez Daniel

15 de 248

Manual de algortmica Ejemplo

Subgrafo inducido por las aristas {v1v4, v4v5, v5v6, v6v3, v4v3}.

Borrego Ropero Rafael Recio Domnguez Daniel

16 de 248

Manual de algortmica

Algunos grafos bsicos.

Grafos completos. Sea G un grafo de orden p. G es completo si dos vrtices cualesquiera del grafo son siempre adyacentes, es decir, todos sus vrtices tienen valencia o grado p-1 (kp). Ejemplo k4.

Ejemplo k5.

Borrego Ropero Rafael Recio Domnguez Daniel

17 de 248

Manual de algortmica

Caminos simples.

Un grafo de orden p 1 que es un camino simple se denota Pp. Un camino simple tiene longitud par si p es impar y longitud impar si p es par. Ejemplo

Ciclos.

Los ciclos Cn o n-ciclos para p 3, son grafos que se asemejan a polgonos de p lados. Un ciclo tiene longitud par si n es par y longitud impar si n es par. Ejemplo C5.

Borrego Ropero Rafael Recio Domnguez Daniel

18 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

19 de 248

Manual de algortmica rbol. Un rbol de n vrtices es un grafo conexo, sin ciclos con exactamente n-1 aristas. Adems posee las siguientes propiedades. a) Dos vrtices cualesquiera estn unidos por un nico camino. b) Si al grafo le eliminamos cualquiera de sus aristas queda dividido exactamente en dos componentes conexas dando lugar a un bosque. Ejemplo.

Borrego Ropero Rafael Recio Domnguez Daniel

20 de 248

Manual de algortmica Bosque Conjunto de rboles. Ejemplo.

Existen ms tipos de grafos como los bipartitos los cuales se comentan ms adelante. Concretamente hay un apartado dedicados exclusivamente para ellos y en el algoritmo de Kuhn-Munkres se comenta previamente los grafos bipartitos completos.

Borrego Ropero Rafael Recio Domnguez Daniel

21 de 248

Manual de algortmica

rbol n-ario completo.

Una de las formas de representacin de la informacin, como estructura de datos, ms utilizada es el rbol. Un rbol consiste en un nodo inicial, llamado raz, del que parten un cierto nmero de aristas, denominadas ramas, cada una hasta un nuevo vrtice. Los vrtices extremos de una arista se llaman tambin vrtice padre, aquel que se representa ms cerca de la raz, y el otro vrtice hijo. A su vez, estos vrtices hijos pueden presentar ramas hacia nuevos nodos hijos, que debern ser siempre nodos diferentes, ya que un rbol no puede presentar ciclos. Por ltimo, aquellos vrtices que no presentan ramas hacia ningn hijo, se denominan hojas. El caso de los rboles n-arios completos es un caso particular dentro de los rboles. La referencia a n-arios-completos se debe a que el nmero de ramas que sale de cada nodo padre, que es en todos los casos igual a n. Para definir completamente un grafo perteneciente a esta familia, en realidad son necesarios 2 parmetros. Uno es la n anteriormente comentado, y el otro es el nmero de niveles que se le quiere dar al grafo, esto es, el nmero de ramas que deber tener el grafo desde el vrtice raz hasta cualquiera de los vrtices hoja.

Borrego Ropero Rafael Recio Domnguez Daniel

22 de 248

Manual de algortmica Grafos nulos

Un grafo nulo es aquel que no contiene aristas. Un grafo nulo puede tener un nmero de vrtices cualquiera pero todos ellos son vrtices aislados. Obviamente, en un grafo nulo el nmero de componentes conexas ser igual al nmero de vrtices. Un ejemplo de grafo nulo de cuatro vrtices puede observarse en la figura.

Borrego Ropero Rafael Recio Domnguez Daniel

23 de 248

Manual de algortmica

Rueda

Como en los casos de los grafos ciclos y los grafos estrella, la familia de los grafos ruedas toma su apelativo de la figura con la que se representan estos grafos. En este caso, la figura que muestra un grafo rueda viene a ser el resultado de la unin de las dos familias citadas anteriormente, esto es, un vrtice central rodeado de los dems vrtices del grafo en forma de crculo, de forma que stos se unen mediante aristas entre vrtices consecutivos, y, a su vez, mediante una arista ms, quedan unidos al vrtice central, dando al conjunto el aspecto de una rueda con sus radios. As, para cada n4, el grafo rueda, W n, con n+1 vrtices, se define como la unin K1+Cn, de un vrtice aislado con un ciclo de longitud n.

Borrego Ropero Rafael Recio Domnguez Daniel

24 de 248

Manual de algortmica Cubos

Otra de las familias de grafos que suelen considerarse con bastante asiduidad es la de los cubos. Esta familia est formada por los cubos de las distintas dimensiones, desde el cubo de dimensin 1, como observaremos en el apartado siguiente, hasta cualquier nmero de dimensiones. Sea K un entero positivo mayor que 1. El k-cubo, Qk, es el grafo cuyos vrtices son las k-tuplas ordenadas de ceros y unos, en el cual dos vrtices estn unidos por una arista si y slo si difieren exactamente en una posicin. As, por ejemplo, para k=3, los vrtices son (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), y (1, 1, 1) y, por ejemplo, (0, 0, 0) est unido con (0, 0, 1), (0, 1, 0) y (1, 0, 0) pero no con ningn otro vrtice. Se puede comprobar que un k-cubo tiene 2k vrtices, 2(k-1)k aristas y es bipartito.

Cubo de dimensin 1.

El grafo que representa el cubo de dimensin 1, tal y como se ha explicado en el apartado anterior, tiene 21 vrtices y (1/2)21 = 1 arista.

Borrego Ropero Rafael Recio Domnguez Daniel

25 de 248

Manual de algortmica Cubo de dimensin 2.

Como ya se ha explicado en apartados anteriores, el grafo que representa el cubo de dimensin dos tiene un total de 4 vrtices de grado 2, para lo cual son necesarias 4 aristas.

Cubo de dimensin 3.

Al igual que en los casos de los dems cubos, el grafo que representa el cubo de dimensin tres sigue la misma relacin de vrtices y aristas descrita en la introduccin de este apartado. Por lo tanto, el cubo de 3 dimensiones, tal y como es comnmente conocido, cuenta con 8 vrtices de grado 3, para lo cual necesita 12 aristas.

Borrego Ropero Rafael Recio Domnguez Daniel

26 de 248

Manual de algortmica Cubo de dimensin 4.

Como en los casos anteriores, el cubo de 4 dimensiones tambin cumple la relacin de vrtices y aristas descrita, por lo que tiene 24 vrtices y 25 aristas, lo que le da un grado 4 a todos sus vrtices, como ya sabamos.

Borrego Ropero Rafael Recio Domnguez Daniel

27 de 248

Manual de algortmica Cubo de dimensin 5.

Para terminar con los grafos relativos a la familia de los cubos ndimensionales que se incluyen en la aplicacin del presente proyecto fin de carrera, el cubo de 5 dimensiones constar, naturalmente, de 32 vrtices con 80 aristas. Como en el resto de cubos, se puede comprobar que el grado de todos y cada uno de los vrtices del grafo coincide con la dimensin, en este caso, 5.

Borrego Ropero Rafael Recio Domnguez Daniel

28 de 248

Manual de algortmica Rejillas

La familia de grafos que recibe la denominacin de rejillas contiene aquellos grafos cuya representacin da como resultado una trama de figuras regulares repetidas un cierto nmero de veces, lo que da al conjunto el aspecto de una rejilla, lo que le da nombre a la familia. As, podran existir tantos tipos de rejillas como figuran geomtricas quisiramos utilizar como base para la construccin de las mismas. En el presente trabajo se han considerado solamente las dos ms sencillas: la rejilla rectangular y la rejilla triangular, que se explican a continuacin.

Rejilla rectangular

La familia de grafos que componen las rejillas rectangulares se compone de todos aquellos grafos cuya representacin tiene la forma de un rectngulo dividido en un cierto nmero de porciones de ancho por otro cierto nmero de porciones de alto, lo que da al conjunto el aspecto de una rejilla formada, a su vez, por rectngulos de igual tamao. Estos grafos se caracterizan por tener lo que podramos denominar tres grupos diferentes de vrtices. Los vrtices correspondientes a las esquinas del rectngulo, que tendrn, naturalmente, grado 2; los vrtices que forman los lados del rectngulo, que tendrn grado 3; y los vrtices interiores, que tendrn grado 4. El nmero de aristas de estos grafos est claramente determinado por las dimensiones que le demos al rectngulo. Para un nmero i de vrtices de ancho y un nmero j de alto, el nmero de aristas del grafo vendr determinado por la frmula (j-1)i + (i-1)j.

Borrego Ropero Rafael Recio Domnguez Daniel

29 de 248

Manual de algortmica Grafo rejilla rectangular de 20 x 5.

Rejilla triangular

La familia de grafos de las rejillas triangulares, paralelamente a la del rejillas rectangulares, contiene grafos cuya representacin es un triangulo dividido en porciones triangulares iguales. Como es fcil de suponer, el nmero de porciones en que se puede dividir el tringulo de la rejilla tambin est limitado. A diferencia de la rejilla rectangular, las dimensiones de la rejilla triangular se determinan perfectamente con un solo parmetro que ser el nmero de vrtices por cada lado. Al igual que ocurre con las rejillas rectangulares, en las triangulares tambin podemos encontrar tres grupos diferentes de vrtices. Los vrtices correspondientes a las esquinas del tringulo, que tendrn, igualmente, grado 2; los vrtices que forman los lados del tringulo, que tendrn en este caso grado 4; y los vrtices interiores, que tendrn grado 6. El nmero de aristas de estos grafos tambin viene determinado, lgicamente, por las dimensiones que le demos al tringulo. Para un nmero n de vrtices de lado del tringulo, el nmero de aristas del grafo vendr determinado por la frmula (3/2)n(n-1).

Borrego Ropero Rafael Recio Domnguez Daniel

30 de 248

Manual de algortmica Grafo rejilla triangular de 11 vrtices de lado.

Borrego Ropero Rafael Recio Domnguez Daniel

31 de 248

Manual de algortmica Grafos Platnicos

En el espacio de tres dimensiones, un poliedro es un slido limitado por superficies, llamadas comnmente caras, cada una de las cuales es un plano. Un slido se dice que es convexo si cualesquiera dos puntos de su interior pueden unirse mediante una lnea recta que se encuentre completamente en el interior del slido. Sea una cara de un grafo plano G. Definimos el grado de , denotado por d(), al nmero de aristas del contorno de . Los vrtices y las aristas de un poliedro, que forman el esqueleto del slido, forman un grafo simple en el espacio de tres dimensiones. Se puede ver que si el poliedro es convexo el grafo resultante es planar, y claramente, que tambin es conexo. Que el grado mnimo de cada vrtice ser, como mnimo, de 3 y que el grado de cada cara es tambin como mnimo de 3. Adems, en particular el grafo resultante tambin es simple, por lo que se puede establecer la definicin: Un grafo conexo, simple y plano G se denomina polidrico si d(v) 3 para cada vrtice v de G y d()3 para cada cara de G. Teorema: Sea P un poliedro convexo y sea G su grafo polidrico. Para cada n3 sea vn el nmero de vrtices de G de grado n y sea fn el nmero de caras de G de grado n. << vrticesG + carasG = aristasG +2 >> El poliedro P, y por lo tanto el grafo G, tiene al menos una cara limitada por un ciclo de longitud n para n=3, 4, o 5. Los antiguos griegos descubrieron cinco poliedros regulares. Se dice que un poliedro es regular si es convexo y sus caras son polgonos regulares congruentes (esto es, que los ngulos del poliedro son todos iguales). Estos cinco poliedros son conocidos como slidos platnicos. Usando la frmula de Euler se puede demostrar que no existe ningn otro poliedro regular adems de los 5 que descubrieron los griegos y cuyos grafos correspondientes constituyen la familia que se incluye en la herramienta y los cuales se presentan a continuacin.

Borrego Ropero Rafael Recio Domnguez Daniel

32 de 248

Manual de algortmica A continuacin, se detalla un poco ms cada uno de los citados grafos. Tetraedro

El grafo platnico que representa la figura del tetraedro consta, naturalmente, de 4 vrtices y 6 aristas. Como se puede observar en la figura siguiente, todos los vrtices del grafo tienen grado 3, y las caras de la figura representada son todas tringulos, como corresponde a dicha figura. El grafo platnico tetraedro se encuentra representado planarmente en la siguiente figura.

Borrego Ropero Rafael Recio Domnguez Daniel

33 de 248

Manual de algortmica Hexaedro

Como el hexaedro que representa, el grafo platnico hexaedro tiene 8 vrtices y 12 aristas, formando 6 caras de cuatro lados. Como todos sabemos ya, la figura geomtrica hexaedro recibe tambin el nombre de cubo refirindose al cubo de tres dimensiones, por lo que el grafo platnico hexaedro, coincide exactamente con el grafo que representa el cubo tridimensional. El grafo platnico hexaedro se encuentra representado planarmente en la siguiente figura.

Borrego Ropero Rafael Recio Domnguez Daniel

34 de 248

Manual de algortmica Octaedro

Como es bien conocido, un octaedro es una figura geomtrica que, como su propio nombre indica, consta de ocho caras, en forma de tringulo. Como es lgico, el grafo que lo representa tiene sus mismas caractersticas, como ya hemos visto en los ejemplos anteriores, es decir, 6 vrtices y 12 aristas. El grado de todos los vrtices de este grafo, obviamente, es 4. El grafo platnico octaedro se encuentra representado planarmente en la siguiente figura.

Borrego Ropero Rafael Recio Domnguez Daniel

35 de 248

Manual de algortmica Icosaedro

Como en todos los casos anteriores el grafo platnico icosaedro, al representar la figura geomtrica de la que toma nombre, posee tambin sus mismas caractersticas. En el caso del icosaedro, 12 vrtices de grado 5, con 30 aristas, para lograr formar 20 caras triangulares. El grafo platnico icosaedro se encuentra representado planarmente en la siguiente figura.

Borrego Ropero Rafael Recio Domnguez Daniel

36 de 248

Manual de algortmica Dodecaedro

La ltima de las figuras representadas en la aplicacin y, por lo tanto, contenidas en el presente texto, mediante un grafo platnico es la del dodecaedro. Este grafo contar, pues, con los mismos 20 vrtices y las mismas 30 aristas que dan a la figura mencionada sus caractersticas 12 caras pentagonales. Para ello, los vrtices de este grafo tienen todos grado 3. El grafo platnico dodecaedro se encuentra representado planarmente en la siguiente figura.

Borrego Ropero Rafael Recio Domnguez Daniel

37 de 248

Manual de algortmica Herschel

Se ha incluido en la aplicacin el grafo atribuido a Herschel ya que tiene la particularidad de constituir el ejemplo ms pequeo de grafo polidrico nohamiltoniano.

Borrego Ropero Rafael Recio Domnguez Daniel

38 de 248

Manual de algortmica Harary

Otra de las familias que se incluyen en el presente trabajo es la correspondiente a los grafos de Harary. Los grafos de Harary se definen mediante dos parmetros: el nmero de vrtices del grafo, que se denota por n; y el grado mnimo que debe tener cada vrtice del grafo, que se denota por k. Debido a esta notacin, los grafos de Harary suelen describirse mediante la simbologa: Hk, n. Estos grafos cumplen la propiedad de hacer que cada uno de sus vrtices tenga, como mnimo grado k, pero utilizando para ello el mnimo nmero de aristas posible. Un ejemplo de este tipo de grafos, donde se pueden observar las caractersticas descritas es H11, 10.

Borrego Ropero Rafael Recio Domnguez Daniel

39 de 248

Manual de algortmica Grafos enlazados.

Los grafos enlazados se caracterizan porque, si numeramos sus vrtices, las aristas del grafo enlazan vrtices cuyo nmero se diferencia un una cantidad fija -que podemos llamar k-, es decir, siguiendo una determinada progresin lineal. Por ejemplo, si hacemos k=2, el vrtice 1 se unira al 3, el 2 al 4, y as sucesivamente con todos los vrtices del grafo. Si en lugar de tener en cuenta tan slo este valor de k, tomramos una serie completa de valores k1, k2, ... , kn, obtendramos un grafo que podramos denominar n-enlazado. Los grafos enlazados ms comunes son aquellos para los que n=1, que denotamos por Ln,r y aquellos en los que n=2, que denotamos por Ln,r,s. Enlazados LN, R Dado un grafo G, definido por un conjunto de vrtices V y un conjunto de aristas A. Supongamos v1, ..., vn los vrtices contenidos en V. Se dice que G es un grafo enlazado Ln, r si cumple que: vi, vj V, tales que (j<r j+n=i+r) (j=r j=i+r), la arista (vi, vj) A Los grafos enlazados Ln, r se caracterizan porque todos sus vrtices tienen grado dos. Para r>1, la forma de estos grafos, situando sus vrtices en crculo, es de estrella, como se puede observar en el ejemplo de la figura. L5,2.

Borrego Ropero Rafael Recio Domnguez Daniel

40 de 248

Manual de algortmica Enlazados LN, R, S Dado un grafo G, definido por un conjunto de vrtices V y un conjunto de aristas A. Supongamos v1, ..., vn los vrtices contenidos en V. Se dice que G es un grafo enlazado Ln, r, s si cumple que: r s, vi, vj V, tales que (j<r j+n=i+r) (j=r j=i+r), la arista (vi, vj) A, y vk, vl V, tales que (l<r l+n=k+r) (l=r l=k+r), la arista (vk, vl) A

Los grafos enlazados Ln, r, s se caracterizan porque todos sus vrtices tienen grado cuatro. Un ejemplo de estos grafos es el que se puede observar en la figura L7, 2, 3.

Borrego Ropero Rafael Recio Domnguez Daniel

41 de 248

Manual de algortmica Grafo de Petersen

El grafo que aqu se presenta debe su nombre a que la primera persona que lo estudi fue Petersen en el ao 1891. Las tres representaciones ms habituales del grafo de Petersen.

Entre las muchas cualidades interesantes que presenta este grafo, podemos mencionar las siguientes. Es un grafo 3-regular y de cintura 5, siendo adems, el grafo de orden mnimo que cumple estas caractersticas. Es un grafo de dimetro 2 lo que se traduce en que tiene 10 vrtices de la forma ms compacta posible. Tiene valor de conectividad y de arista-conectividad 3, caracterstica esta que ha sido ampliamente estudiada en la rama de las redes de telecomunicaciones. No es un grafo hamiltoniano pero tiene la peculiaridad de que el subgrafo resultante de eliminar cualquiera de sus vrtices s lo es. Adems, es el menor grafo con esta propiedad.

Borrego Ropero Rafael Recio Domnguez Daniel

42 de 248

Manual de algortmica Grafo de Grtzsch.

Otro de los grafos que por su relevancia han sido incluidos en la aplicacin como grafo singular es el denominado grafo Grtzsch. Para entender el inters que presenta este grafo es necesario primero introducir algunos conceptos de la Teora de Grafos. A continuacin pasamos a definir brevemente tales conceptos. Para cualquier grafo G un subgrafo completo de G se denomina clique de G. El nmero de vrtices del clique ms grande de G se denomina el nmero clique de G y se denota por cl(G). Sea G un grafo. Un coloreado de vrtices de G asigna colores, normalmente denotados por 1, 2, 3,... a los vrtices de G, uno por cada vrtice, de forma que vrtices adyacentes tienen asignados colores diferentes. Un k-coloreado de G es un coloreado que consiste en k colores diferentes y, en ese caso, el grafo G se dice que es k-coloreable. El mnimo nmero k para el cual existe un k-coloreado del grafo G se denomina nmero cromtico de G (o ndice cromtico de G) . Teorema: Para cada k1 existe un grafo k-cromtico Mk que no tiene subgrafos tringulos (K3). De esta familia de grafos Mi denominada familia Mycielski, el de Grtzsch representa el grafo M4. La siguiente figura muestra una representacin del grafo de Grtzsch.

Borrego Ropero Rafael Recio Domnguez Daniel

43 de 248

Manual de algortmica Grafo de Heawood

Se trata de un grafo 3-regular de cintura 6 con menor nmero de vrtices.

Borrego Ropero Rafael Recio Domnguez Daniel

44 de 248

Manual de algortmica Tutte

El grafo de Tutte es un grafo planar, 3-conexo no hamiltoniano. El aspecto ms importante que presenta este grafo es que se utiliza para refutar la conjetura de Tait, que afirmaba que "todo grafo 3-regular, 3-conexo y planar es hamiltoniano". Esta conjetura tena importancia para demostrar de una forma sencilla el teorema de los cuatro colores, pero fracas a causa de este grafo contraejemplo. Una representacin de este grafo como la de la figura nos permitir comprobar las propiedades descritas.

Borrego Ropero Rafael Recio Domnguez Daniel

45 de 248

Manual de algortmica

Tipos de rutas

A continuacin definiremos algunos conceptos sobre rutas que debemos conocer para comprender algunos de los algoritmos explicados. Definiremos: Camino. Recorrido. Camino simple. Camino cerrado. Ciclo. Circuito. Un camino w simple en un grafo G es una sucesin de alternada de vrtices y aristas o arcos (si es dirigido) w: v0e1v1e2v2vn-1envn comenzando y terminando con vrtices tal que ei = vi-1vi con 1 i n. Diremos que w tiene longitud n si posee n aritas. Un camino de longitud cero se denomina camino trivial. Ejemplo.

Camino 1: v1v3v5v2v4v3v1v2. Camino 2: v4v2v5v3v1.

Borrego Ropero Rafael Recio Domnguez Daniel

46 de 248

Manual de algortmica Un recorrido o trayectoria es un camino donde no se repiten aristas. Un posible ejemplo basndonos en el grafo anterior. Recorrido 1: v4v2v5v3v1. Recorrido 2: v5v3v1v2. Un camino simple es un camino en el que no se repiten vrtices. Camino simple: v4v2v5v3v1. Un ciclo es un camino simple v0v1vn con n 3, v0 = vn y los n vrtices son distintos. Al ciclo de longitud n lo denominaremos n-ciclo. Ciclo: v1v3v5v2v1 Un ciclo es un camino cerrado que cumple las propiedades anteriores y un camino simple es un camino abierto. Un camino cerrado donde no se repiten es un circuito. Circuito: v1v2v5v3v2v4v3v1.

Vrtices repetidos SI SI SI SI NO NO

Aristas repetidas Abierto Cerrado SI SI SI NO NO SI NO SI NO SI

Tipo ruta Camino Camino cerrado Recorrido Circuito Camino simple Ciclo

Borrego Ropero Rafael Recio Domnguez Daniel

47 de 248

Manual de algortmica

Grafo complementario.

El grafo complementario de G () es un grafo con V() = V(G) y tal que si uv es una arista de si y solo si uv no es una arista de G. Ejemplo 1. (Grafo no dirigido)

Grafo complementario.

Borrego Ropero Rafael Recio Domnguez Daniel

48 de 248

Manual de algortmica Ejemplo 2. (Grafo dirigido).

Grafo complementario.

Borrego Ropero Rafael Recio Domnguez Daniel

49 de 248

Manual de algortmica

Grafo de lnea.

El grafo de lnea L(G) de G es un grafo que posee tantos vrtices como aristas tiene G, es decir, | V(L(G)) | = | E(G) |. Dos vrtices v y u de L(G) son adyacentes si u y v son aristas de G y inciden en un mismo vrtice. Ejemplo 1

Grafo de lnea.

Borrego Ropero Rafael Recio Domnguez Daniel

50 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

51 de 248

Manual de algortmica Ejemplo 2.

Grafo de lnea.

Borrego Ropero Rafael Recio Domnguez Daniel

52 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

53 de 248

Manual de algortmica

3.- Algoritmos implementados.


3.1.- Algoritmos sobre caminos mnimos.
Algoritmo de Dijkstra.
Sea G un grafo ponderado no trivial la distancia entre dos vrtices u y v en G es la longitud mnima ponderada de todos los caminos u-v en G, si existe, en otro caso infinito. El algoritmo de Dijkstra calcula la distancia en desde un vrtice fijo tomado como origen al resto de vrtices del grafo. Dicho algoritmo se ha implementado mediante tcnicas de programacin dinmica haciendo uso de una tabla en la que se van realizando una serie de clculos previos para encontrar la distancia mnima entre el vrtice origen y el resto de vrtices del grafo. Para llevar a cabo la implementacin se ha usado una tabla bidimensional la cual posee tantas filas y columnas como vrtices posee el grafo. Adems se utilizan dos variables temporales m y Vi las cuales se van machacando en cada iteracin las cuales almacenaran la distancia mnima recorrida hasta el momento y el vrtice en el que nos encontramos actualmente en un determinado instante de la ejecucin respectivamente. Inicialmente la variable m tiene el valor cero y Vi almacena el vrtice origen. Adems debemos saber que en cada posicin se almacena una tupla de dos componentes. En la primera componente se almacena la distancia desde el vrtice Vi al vrtice que ocupa una determinada columna. Y en la segunda almacenamos el vrtice padre del vrtice que ocupa la columna, que en cada iteracin ser Vi, a partir del cual se reconstruir el camino mnimo. Una vez que tenemos claro la informacin que contiene dicha tabla podemos rellenarla siguiendo los siguientes pasos. La primera fila tiene de la tabla se inicializa por defecto con la tupla (, -1). El -1 indica que el vrtice de la columna an no tiene asignado ningn padre.

Borrego Ropero Rafael Recio Domnguez Daniel

54 de 248

Manual de algortmica En cada iteracin se rellena una fila, siguiendo los siguientes pasos: 1.- Buscamos los vrtices adyacentes al vrtice Vi y en la columna correspondiente al adyacente. Si la distancia total recorrida hasta el momento ms la distancia entre Vi y el adyacente es menor o igual que la ya recorrida entonces actualizamos la tupla con la nueva distancia y vrtice padre. Es importante actualizar la tabla si la distancia es igual ya que as conseguiremos obtener varias rutas mnimas entre el vrtice origen y destino. 2.- A continuacin tomamos como nuevo vrtice Vi, el vrtice correspondiente a la columna cuya distancia es mnima. Una vez escogido el vrtice cuya distancia es mnima la columna queda cerrada, es decir no vuelve a considerarse para rellenar el resto de la tabla. Una vez que tenemos rellenada la tabla reconstruir el camino mnimo a partir de la misma es bastante fcil. Se ha optado por reconstruir el camino desde el vrtice destino al vrtice origen, por lo que el primer vrtice que forma parte del camino parcialmente construido es el vrtice destino. Acto seguido nos situamos en la primera posicin distinta de * de la columna correspondiente al vrtice destino comenzando por la parte inferior de la tabla y el vrtice padre es el siguiente que forma parte del camino. La longitud del camino viene determinada por la distancia almacenada en dicha posicin. Ahora nos situamos en la columna del vrtice padre y repetimos el proceso anterior hasta llegar al vrtice origen. En ese momento tendremos el camino mnimo completo. Para que la exposicin expondremos algunos ejemplos. del algoritmo quede totalmente clara

Borrego Ropero Rafael Recio Domnguez Daniel

55 de 248

Manual de algortmica Ejemplo 1

Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo entre el vrtice v1 y v8 obteniendo la siguiente tabla.
V1 (v2,P(v2)) (v3,P(v3)) (v4,P(v4)) (v5,P(v5)) (V6,P(v6)) (v7,P(v7)) (v8,P(v8)) m Vi

(0,NP) * * * * * * *

(,NP) (2,v1) * * * * * *

(,NP) (3,v1) (3,v1) * * * * *

(,NP) (,NP) (3,v2) (3,v2) * * * *

(,NP) (,NP) (3,v2) (3,v2) (3,v2) * * *

(,NP) (,NP) (,NP) (,NP) (4,v4) (4,v5) * *

(,NP) (,NP) (,NP) (6,v3) (6,v3) (6,v3) (6,v3) *

(,NP) (,NP) (,NP) (,NP) (,NP) (,NP) (8,v6) (8,v7)

0 2 3 3 3 4 6 8

V1 V2 V3 V4 V5 V6 V7 V8

A continuacin reconstruiremos el camino desde el vrtice v1 a vrtice v8 comenzando por este ltimo.

Para ir desde el vrtice v8 al vrtice v1 es necesario pasar por el padre de v8. El camino construido hasta el momento es v8 v7 ... v1. Seguidamente miraramos quien es el padre del ltimo vrtice que forma parte del camino parcialmente construido, en este caso es v3 y as sucesivamente.

Borrego Ropero Rafael Recio Domnguez Daniel

56 de 248

Manual de algortmica

El camino completo es: v8 {P(v8)} v7 {P(v7)} v3 v3 {P(v3)} v7 v1 {P(v1)}.

Camino mnimo: v1

v8. La longitud del camino es 8.

Podemos observar en la columna del vrtice de destino que existen dos tuplas con padres distintos e igual distancia lo cual no ndica que existe ms de un camino mnimo. Reconstruccin del segundo camino: v8 {P(v8)} v6 {P(v6)} v2 v5 {P(v5)} v5 v6 v2 {P(v2)} v1 {P(v1)}.

Camino mnimo: v1

v8. La longitud del camino es 8.

Podemos observar que en la columna correspondiente al vrtice V6 existen dos tuplas con padres distintos y misma distancia por lo que existe otro camino mnimo ms.

Reconstruccin del tercer camino: v8 {P(v8)} v6 {P(v6)} v2 v4 {P(v4)} v4 v6 v2 {P(v2)} v1 {P(v1)}.

Camino mnimo: v1

v8. La longitud del camino es 8.

Borrego Ropero Rafael Recio Domnguez Daniel

57 de 248

Manual de algortmica Ejemplo 2

Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo entre el vrtice v1 y v4 obteniendo la siguiente tabla.
V1 (v2,P(v2)) (v3,P(v3)) (v4,P(v4)) (v5,P(v5)) m Vi

(0,NP) * * * *

(,NP) (5,v1) (5,v1) * *

(,NP) (4,v1) * * *

(,NP) (,NP) (12,v3) (7,v2) (7,v5)

(,NP) (,NP) (6,v3) (6,v3) *

0 4 5 6 7

V1 V3 V2 V5 V4

Recontraccin del primer camino mnimo desde el vrtice v1 a v4. V4 {P(v4)} v5 {P(v5)} v3 v3 {P(v3)} v5 v1 {P(v1)}.

Camino mnimo: v1

v4. La longitud del camino es 7.

Recontraccin del segundo camino mnimo desde el vrtice v1 a v4. V4 {P(v4)} v2 {P(v2)} v2 v1 {P(v1)}. v4. La longitud del camino es 7.

Camino mnimo: v1

Borrego Ropero Rafael Recio Domnguez Daniel

58 de 248

Manual de algortmica Ejemplo3

Borrego Ropero Rafael Recio Domnguez Daniel

59 de 248

Manual de algortmica Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo entre el vrtice v1 y v4 obteniendo la siguiente tabla.
V1 (v2,P(v2))

(0,NP) * * * *

(,NP) (1,v1) * * *

(v3,P(v3))

(,NP) (,NP) (4,v2) * *

(v4,P(v4))

(,NP) (,NP) (,NP) (,NP) *

(v5,P(v5))

(,NP) (,NP) (,NP) (,NP) *

Vi

0 1 4

V1 V2 V3

En este caso observamos que el vrtice destino no tiene padre asignado, lo cual nos indica que el grafo no es conexo, por lo que no existe ningn camino entre el vrtice origen y destino.

Borrego Ropero Rafael Recio Domnguez Daniel

60 de 248

Manual de algortmica

Algoritmo de Floyd.
El algoritmo de Floyd calcula el camino mnimo entre todos los pares de vrtices del grafo ponderado y no negativo mediante tcnicas de programacin dinmica. Para ello calcularemos una serie de matrices Dk[i,j] que debe cumplir:

Dk-1[i, k]+ Dk-1[k, j] (pasando por k). Dk[i, j] = Dk-1[i, j] (no pasando por k).

Donde Dk[i, j] = mnimo(Dk-1[i,k] + Dk-1[k,j]), D[i][j]). Longitud del camino ms corto para ir desde el vrtice i al vrtice j pudiendo pasar por los vrtices 1,2,..., hasta k. Bsicamente la expresin anterior nos dice: si para ir desde el vrtice i al j mejoramos pasando por el vrtice k, este se aade al camino. Adems para reconstruir el camino se hace uso de una matriz de trayectorias donde en cada iteracin si se mejora el camino desde el vrtice i al vrtice j pasado por k, este se anota en la matriz de trayectorias. El algoritmo de Floyd quedara: Func floyd (ady: Array[1..n,1..n] de entero) dev(D: Array[1..n,1..n] de entero, p: Array[1..n,1..n] de entero ) var i,j,k: Entero prin desde i=1 hasta n desde j=1 hasta n desde k=1 hasta n si k <> i y k<>j si D[i,j] > D[i,k] + D[k,j] D[i, j] := D[i,k] + D[k,j] P[i,j] := k // Vrtice de paso. fsi fsi fdesde fdesde fdesde

Borrego Ropero Rafael Recio Domnguez Daniel

61 de 248

Manual de algortmica fin

A continuacin veremos un ejemplo con ms detalle: Ejemplo1

Calcularemos la sucesin de matrices Dk. Sea M[i,j] la matriz de adyacencias del grafo. V1 V2 V3 V4 0 5 50 0 15 5 30 0 15 15 5 0

M [j, j] =

V1 V2 V3 V4

Primera iteracin D1 representa el camino ms corto para ir desde vrtice i al vrtice j pudiendo pasar nicamente por el vrtice 1. V1 V2 V3 V4 V1 0 5 V2 50 0 15 5 V3 30 35 0 15 V4 15 20 5 0 V1 V2 V3 V4 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0

D1 =

P[i,j] =

V1 V2 V3 V4

Borrego Ropero Rafael Recio Domnguez Daniel

62 de 248

Manual de algortmica

D2 representa el camino ms corto para ir desde vrtice i al vrtice j pudiendo pasar nicamente por el vrtice 1 y 2.

D2 =

V1 V2 V3 V4

V1 V2 V3 V4 0 5 20 10 50 0 15 5 30 35 0 15 15 20 5 0

P[i,j] =

V1 V2 V3 V4

V1 V2 V3 V4 0 0 2 2 0 0 0 0 0 1 0 0 0 1 0 0

D3 representa el camino ms corto para ir desde vrtice i al vrtice j pudiendo pasar nicamente por el vrtice 1, 2 y 3.

D3 =

V1 V2 V3 V4

V1 V2 V3 V4 0 5 20 10 45 0 15 5 30 35 0 15 15 20 5 0

P[i,j] =

V1 V2 V3 V4

V1 V2 V3 V4 0 0 2 2 3 0 0 0 0 1 0 0 0 1 0 0

D4 representa el camino ms corto para ir desde vrtice i al vrtice j pudiendo pasar nicamente por el vrtice 1, 2, 3 y 4. En la ltima etapa se consideran todos los vrtices del grafo.

D4 =

V1 V2 V3 V4 V1 0 5 15 10 V2 20 0 10 5 V3 30 35 0 15 V4 15 20 5 0

P[i,j] =

V1 V2 V3 V4

V1 V2 V3 V4 0 0 4 2 4 0 4 0 0 1 0 0 0 1 0 0

Borrego Ropero Rafael Recio Domnguez Daniel

63 de 248

Manual de algortmica Cmo se reconstruye el camino?. Para ir desde un vrtice vi a un vrtice vj consultamos la posicin P[i,j] de la matriz de trayectorias: Si es 0 entonces existe camino directo para ir desde el vrtice i al j y el camino se obtiene directamente. En otro caso sea Vpaso = P[i,j]. Ahora visitamos la posicin P[Vpaso,j] repitiendo el mismo proceso. Reconstruccin del camino mnimo para ir desde el vrtice v2 al vrtice v3. P[2,3] = 4 por lo que para ir de v2 a v3 es necesario pasar por el vrtice 4. P[4,3] = 0 existe camino directo.

Camino mnimo: v2

v4

v3.

Borrego Ropero Rafael Recio Domnguez Daniel

64 de 248

Manual de algortmica

3.2.- Algoritmos de distancias.


Excentricidad de un vrtice.

La excentricidad de un vrtice v de un grafo G es la distancia de v al vrtice ms alejado de l, es decir, se trata de la mayor longitud del camino ms corto entre el vrtice y cualquier otro. Para implementar el algoritmo pueden seguirse los siguientes pasos: 1.- Calculamos Dijsktra desde el vrtice v a resto de vrtices del grafo. 2.- Finalmente de todos los caminos mnimos obtenidos tomamos la longitud mayor.

Seguidamente veremos un ejemplo. Para el grafo de la figura calcularemos la excentricidad del vrtice v1.

Distancia mnima distmin(v1, v2) distmin(v1, v3) distmin(v1, v4) distmin(v1, v5)

Valor camino mnimo 5 4 7 6

Borrego Ropero Rafael Recio Domnguez Daniel

65 de 248

Manual de algortmica La excentricidad es 7.

Borrego Ropero Rafael Recio Domnguez Daniel

66 de 248

Manual de algortmica

Radio de un grafo.

El radio de un grafo G es la excentricidad ms pequea de cualquiera de sus vrtices. Para implementar el algoritmo pueden seguirse los siguientes pasos: 1.- Para cada vrtice obtenemos la excentricidad. 2.- Obtener la excentricidad ms pequea.

Veamos un ejemplo.

Para el grafo de la figura calcularemos el radio.

Distancia mnima distmin(v1, v2) distmin(v1, v3) distmin(v1, v4) distmin(v1, v5)

Valor camino mnimo 5 4 7 6

Borrego Ropero Rafael Recio Domnguez Daniel

67 de 248

Manual de algortmica

Distancia mnima distmin(v2, v1) distmin(v2, v3) distmin(v2, v4) distmin(v2, v5) Distancia mnima distmin(v3, v1) distmin(v3, v2) distmin(v3, v4) distmin(v3, v5)

Valor camino mnimo 5 5 2 3

Valor camino mnimo 4 5 3 2

Distancia mnima distmin(v4, v1) distmin(v4, v2) distmin(v4, v3) distmin(v4, v5)

Valor camino mnimo 7 2 3 1

Distancia mnima distmin(v5, v1) distmin(v5, v2) distmin(v5, v3) distmin(v5, v4)

Valor camino mnimo 6 3 2 1

Como sabemos la excentricidad de cada vrtice es la mayor longitud del camino ms corto. A partir de los clculos realizados con anterioridad podemos obtener una tabla con la excentricidad de cada vrtice.

v1 v2 v3 v4 v5 7 5 5 7 6

Para obtener el radio basta con obtener el mnimo del array.

Borrego Ropero Rafael Recio Domnguez Daniel

68 de 248

Manual de algortmica

Dimetro de un grafo.

El dimetro de un grafo G es la mayor distancia existente entre dos vrtices cualesquiera del grafo, es decir, es la excentricidad ms grande de cualquiera de sus vrtices. Para implementar el algoritmo pueden seguirse los siguientes pasos: 1.- Para cada vrtice obtenemos la excentricidad. 2.- Obtener la excentricidad mxima.

Veamos un ejemplo:

Para el grafo de la figura obtendremos el dimetro, aprovechado los clculos anteriores realizados para el radio. El dimetro del grafo es 7.

Borrego Ropero Rafael Recio Domnguez Daniel

69 de 248

Manual de algortmica

Distancia de un vrtice.

La distancia de un vrtice "v" en un grafo G ponderado o no, es la suma de las distancias mnimas a todos los vrtices del grafo.

Para implementar el algoritmo pueden seguirse los siguientes pasos: 1.- Calcula Dijsktra para todos los vrtices del grafo. 2.- Sumar todas las distancias. Si entre un vrtice v y otro cualquiera existiera ms de un camino mnimo solo se tendr en cuenta un de los caminos a la hora sumar las distancias.

Veamos un ejemplo: Para el grafo de la figura calcular la distancia del vrtice v1 y v5.

Distancia mnima distmin(v1, v2) distmin(v1, v3) distmin(v1, v4) distmin(v1, v5)

Valor camino mnimo 5 4 7 6

Borrego Ropero Rafael Recio Domnguez Daniel

70 de 248

Manual de algortmica distancia Distancia mnima distmin(v5, v1) distmin(v5, v2) distmin(v5, v3) distmin(v5, v4) distancia 22 Valor camino mnimo 6 3 2 1 12

Antes de comentar los algoritmos de la mediana y el centro de un grafo definiremos el concepto de subgrafo inducido por el conjunto de vrtices del grafo. Sea S un conjunto de vrtices no vaci de un grafo G. El subgrafo inducido por S es el subgrafo maximal de G, con vrtices en el conjunto S. Las aristas que forman parte del subgrafo inducido son todas las aristas de G que inciden o unen vrtices de S.

Borrego Ropero Rafael Recio Domnguez Daniel

71 de 248

Manual de algortmica

Algoritmo de la mediana.

La mediana de un grafo G es el subgrafo inducido por los vrtices que tienen mnima distancia. Para implementar el algoritmo pueden seguirse los siguientes pasos: 1.- Calcular la distancia de cada vrtice. . 2.- Escoger el subconjunto de vrtices de mnima distancia. 3.- Construir el subgrafo inducido por dicho conjunto de vrtices obtenidos en el paso 2.

Veamos un ejemplo. Calcular la mediana en el siguiente grafo.

distancia(V1) distancia(v2) distancia(v3) distancia(v4) distancia(v5)

22 15 14 13 12

Borrego Ropero Rafael Recio Domnguez Daniel

72 de 248

Manual de algortmica En este caso la mediana del grafo esta formada por un nico vrtice. Dicho vrtice es v5.

Algoritmo del centro.

El centro de un grafo G, es el subgrafo inducido por los vrtices que tienen excentricidad mnima. Para implementar el algoritmo pueden seguirse los siguientes pasos: 1.- Para cada vrtice calculamos la excentricidad. 2.- Escoger el subconjunto de vrtices de mnima excentricidad. 3.- Construir el subgrafo inducido por dicho conjunto de vrtices obtenidos en el paso 2.

Veamos un ejemplo

Aprovechamos el clculo de la excentricidad realizado anteriormente. v1 v2 v3 v4 v5 7 5 5 7 6

Borrego Ropero Rafael Recio Domnguez Daniel

73 de 248

Manual de algortmica El subconjunto de vrtices de mnima excentricidad esta formado por los vrtices v2 y v3.

Borrego Ropero Rafael Recio Domnguez Daniel

74 de 248

Manual de algortmica

3.3.- Conectividad.
Algoritmo de componentes conexas.

Se trata de determinar si un grafo dirigido o no, es conexo o no lo es. Podemos usar la propiedad de que si un grafo es conexo es porque existe camino entre todo par de vrtices o, lo que es lo mismo, a partir de cualquier vrtice es posible alcanzar a todos los dems. Para la implementacin se realiza mediante tcnicas de programacin dinmica. Se hace uso de un array en la que cada posicin hace referencia a un vrtice del grafo. Aquellas posiciones que al finalizar la ejecucin posean el mismo valor estarn conectadas y formaran parte de la misma componente conexa. Inicialmente se suponen todos los vrtices desconectados por lo que todas las posiciones del array tienen un valor distinto. Seguidamente se itera sobre las aristas o matriz de adyacencias del grafo, de tal forma que si existe una aritas entre el vrtice correspondiente a la fila i y columna j se almacena en dos variables la componente mayor y menor respectivamente. Acto seguido se itera sobre el array de componente de tal forma que todas las posiciones donde el valor es igual a la componente mayor se actualizan con el valor de la componente menor, es decir, a vrtices conectados se les asigna el mismo valor y se pasa a la siguiente arista repitiendo dicho proceso. Tras iterar sobre todas las aristas el array almacena tantos nmeros distintos como componentes conexas tiene el grafo. Dicha componente conexa viene determinada por el subgrafo inducido de los vrtices que pertenecen a dicha componente conexa. Veamos un ejemplo

Borrego Ropero Rafael Recio Domnguez Daniel

75 de 248

Manual de algortmica

v1 v2 v3 v4 v5 v6 Mayor Menor 1 2 3 4 5 6 * *

En principio todos los vrtices estn desconectados.

v1 v2 v3 v4 v5 v6 Mayor Menor 1 2 3 1 5 6 4 1 El vrtice v1 y v4 estn conectados. Actualizada la posicin del vrtice v4.

v1 v2 v3 v4 v5 v6 Mayor Menor 1 2 3 1 2 6 5 2

El vrtice v2 y v5 estn conectados. Actualizada la posicin del vrtice v5. v1 v2 v3 v4 v5 v6 Mayor Menor 1 2 3 1 2 3 6 3

El vrtice v3 y v6 estn conectados. Actualizada la posicin del vrtice v6. Como puede apreciarse el grafo posee tres componentes conexas que son v1v4 , v2v5 y v3v6 .

Borrego Ropero Rafael Recio Domnguez Daniel

76 de 248

Manual de algortmica

Vrtices de corte.

Sea G un grafo y v un vrtice de G. Se dice que v es un vrtice de corte si al eliminar el vrtice del grafo este es no conexo, es decir, el nmero de componentes conexas es mayor que uno. La implementacin del algoritmo consta de los siguientes pasos: 1.grafo. 2.- Eliminamos un vrtice del grafo. 3.- En estas condiciones se calculan el nmero de componentes conexas. Si el nmero de componentes actuales es distinto del nmero de componentes calculadas inicialmente ms uno, entonces se trata de un vrtice de corte. 4.- Restauramos el vrtice borrado, as como sus aristas y repetimos el proceso con el resto de vrtices (ir al paso 2). Ejemplo El grafo posee tres vrtices de corte: v3, v4, v7. Basta observar que si eliminamos algunos de estos vrtices el grafo no es conexo. Calculamos las componentes conexas que posee inicialmente el

Borrego Ropero Rafael Recio Domnguez Daniel

77 de 248

Manual de algortmica

Aristas puente.

Una arista e en un grafo G se dice que es una arista puente si al eliminar la arista del grafo, este deja de ser conexo. La implementacin del algoritmo consta de los siguientes pasos: 1.grafo. 2.- Eliminamos una arista del grafo. 3.- En estas condiciones se calculan el nmero de componentes conexas. Si el nmero de componentes actuales es distinto del nmero de componentes calculadas inicialmente entonces se trata de una arista puente. 4.- Restauramos la arista del grafo y repetimos el proceso para el resto de aristas del grafo. (Ir al paso 2) Calculamos las componentes conexas que posee inicialmente el

Ejemplo

Las aristas puentes son v4v5, v6v5 y v3v7.

Borrego Ropero Rafael Recio Domnguez Daniel

78 de 248

Manual de algortmica Bloques.

Un bloque B de un grafo G conexo es un subgrafo no separable de G y mayor con esta propiedad. Los bloques permiten hacer una particin en el conjunto de las aristas. Un grafo conexo no trivial sin vrtices de corte recibe el nombre de grafo no separable. Un subgrafo G1 de G es maximal con respecto a una propiedad si no hay ningn otro subgrafo que tambin posea esa propiedad y que contenga a G.

Algunas propiedades.

a) Si G es no separable G es un bloque. b) Los bloques permiten hacer una particin del conjunto de las aristas. c) Cada dos bloques a lo sumo tienen un vrtice en comn y este es un vrtice de corte. d) Un bloque con exactamente un vrtice de corte se denomina bloque final. e) Un grafo G conexo con al menos un vrtice de corte tiene como mnimo dos bloques. f) Una arista puente es considerada un bloque.

El algoritmo para el clculo de bloque consta de 6 pasos:

1.- Calcular los vrtices de corte y aristas puente del grafo. 2.- Eliminar los vrtices de corte del grafo (guardando las aristas). 3.- Calcular las componentes conexas. 4.- Restaurar los vrtices de corte junto con las aristas y eliminar las aristas puente del grafo.

Borrego Ropero Rafael Recio Domnguez Daniel

79 de 248

Manual de algortmica 5.- Para cada vrtice de corte y aristas de cada componente conexa. Si G existe una arista formada por el vrtice de corte y el vrtice origen o destino (o al contrario, es decir, el vrtice origen o destino y el vrtice de corte en caso de ser un grafo dirigido) de una arista de la componente conexa actualmente procesada almacenamos la arista formada por el vrtice de corte en un conjunto S. Una vez procesadas todas las aristas de la componente conexa actual, aadimos todas las aristas almacenadas en S, a la componente actual, obteniendo las aristas de uno de los bloques del grafo. 6.- Finalmente aadimos como bloques todas las aristas puente del grafo a la vez que las restauramos en el grafo G.

A continuacin veremos un ejemplo para cada tipo de grafo. Ejemplo para un grafo no dirigido.

PASO 1.

Vrtices de corte {v5}. Aristas puente {v4v5, v5v6}.

Borrego Ropero Rafael Recio Domnguez Daniel

80 de 248

Manual de algortmica PASO 2.

Eliminamos el vrtice de corte y guardamos las aristas eliminadas {v5v6, v5v4, v1v5, v3v5}.

PASO 3.

Componentes conexas {{v1v2, v1v3, v3v2}, {v4}, {v6}}. PASO 4.

Restauramos el nico vrtice de corte v5 junto con las aristas eliminadas {v5v6, v5v4, v1v5, v3v5} y eliminamos las aristas puente.

Borrego Ropero Rafael Recio Domnguez Daniel

81 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

82 de 248

Manual de algortmica PASO 5.

Comprobamos si en el grafo existe alguna arista formada por v5 y algn vrtice de las aristas de la componente conexa. Este proceso se realiza para cada una de las componentes conexas. Componentes conexas {{v1v2, v1v3, v3v2}, {v4}, {v6}}.

Primera componente conexa {v1v2, v1v3, v3v2}. Conjunto de aristas encontradas {v5v1, v5v3}. Aadimos las aristas encontradas a la lista de aristas de la primera componente conexa obteniendo las aristas del primer bloque. Bloque 1 {v1v2, v1v3, v3v2, v5v1, v5v3}. El resto de componentes conexas nos las saltamos, pues no tienen aristas que procesar.

PASO 6

Finalmente aadimos las aristas puente como bloque del grafo. Bloque 2 {v4v5}. Bloque 3 {v5v6}.

Bloques del grafo:

Bloque 1 {v1v2, v1v3, v3v2, v5v1, v5v3}. Bloque 2 {v4v5}. Bloque 3 {v5v6}.

Borrego Ropero Rafael Recio Domnguez Daniel

83 de 248

Manual de algortmica Ejemplo para un grafo dirigido.

PASO 1.

Vrtices de corte {v2, v3}. Aristas puente {v2v3}.

Borrego Ropero Rafael Recio Domnguez Daniel

84 de 248

Manual de algortmica PASO 2.

Eliminamos el vrtice de corte y guardamos las aristas eliminadas {v2v3, v2v5, v1v2, v4v2, v3v6, v3v7}.

PASO 3.

Componentes conexas {{v1v5, v5v4}, {v6v7}}.

Borrego Ropero Rafael Recio Domnguez Daniel

85 de 248

Manual de algortmica PASO 4.

Restauramos los vrtices de corte junto con las aristas eliminadas {v2v3, v2v5, v1v2, v4v2, v3v6, v3v7} y eliminamos las aristas puente.

PASO 5.

Comprobamos si en el grafo existe alguna arista formada por algn vrtice de corte y algn vrtice de las aristas de la componente conexa. Este proceso se realiza para cada una de las componentes conexas. Componentes conexas {{v1v5, v5v4}, {v6v7}}. Primera componente conexa {v1v5, v5v4}. Conjunto de aristas encontradas {v2v5, v1v2, v4v2} Con el vrtice v3 no se encontr ninguna arista. Aadimos las aristas encontradas a la lista de aristas de la primera componente conexa obteniendo las aristas del primer bloque. Bloque 1 {v1v5, v5v4, v2v5, v1v2, v4v2}.

Borrego Ropero Rafael Recio Domnguez Daniel

86 de 248

Manual de algortmica Segunda componente conexa {v6v7}. Conjunto de aristas encontradas {v3v6, v3v7}. Con el vrtice v2 no se encontr ninguna arista. Aadimos las aristas encontradas a la lista de aristas de la segunda componente conexa obteniendo las aristas del segundo bloque. Bloque 2 {v6v7, v3v6, v3v7}. PASO 6

Finalmente aadimos las aristas puente como bloque del grafo. Bloque 3 {v2v3}.

Bloques del grafo:

Bloque 1 {v1v5, v5v4, v2v5, v1v2, v4v2}. Bloque 2 {v6v7, v3v6, v3v7}. Bloque 3 {v2v3}.

Borrego Ropero Rafael Recio Domnguez Daniel

87 de 248

Manual de algortmica

3.4.- Algoritmos de bsquedas.


Bsqueda en profundidad (DFS) .

El algoritmo de recorrido en profundidad, en ingls depth-first search y que denotaremos DFS para abreviar, permite obtener un rbol recubridor del grafo original. Si G es un grafo un grafo conexo, el algoritmo de bsqueda en profundidad obtiene un rbol recubridor de G. Se trata de un grafo en el que aparecen todos los vrtices de G, pero no todas sus aristas. El rbol recubridor no es nico depende del vrtice de partida. El algoritmo puede implementarse mediante una pila, de tal forma que el vrtice activo o a partir del cual se expande el rbol siempre se encuentra en la cima de la pila. En cada paso se introduce en la pila unos de los vrtices adyacentes al vrtice activo, aadindose al rbol recubridor la arista que une el vrtice activo con dicho adyacente. Puede ocurrir que el vrtice activo no posea adyacentes o que todos hayan sido visitados con anterioridad y an no se han visitados todos los vrtices del grafo, en tal caso el vrtice es retirado de la pila y continuamos con el proceso con el nuevo vrtice activo. El algoritmo termina cuando la pila est completamente vaca, lo que es equivalente a decir que todos los vrtices del grafo han sido visitados. Seguidamente detallaremos los pasos del algoritmo en un ejemplo.

Ejemplo

Borrego Ropero Rafael Recio Domnguez Daniel

88 de 248

Manual de algortmica Aplicaremos el algoritmo de bsqueda en profundidad comenzando por el vrtice v1 Pila v1 v1 v2 v1 v2 v3 v1 v2 v3 v5 v1 v2 v3 v1 v2 v3 v6 v1 v2 v3 v6 v4 v1 v2 v3 v6 v1 v2 v3 v1 v2 v1 Pila vaca Vrtices v2 v3 v5 * v6 v4 * * * * * * Aristas v1 v2 v2 v3 v3 v5 * v3 v6 v6 v4 * * * * * * Visitados v1 v2 v1 v2 v3 v1 v2 v3 v5 v1 v2 v3 v5 v1 v2 v3 v5 v6 v1 v2 v3 v5 v6 v4

La columna de vrtices visitados puede ser til para no introducir en la pila vrtices considerados anteriormente. Adems afinando un poco mas y aprovechado el conjunto de vrtices visitados podemos para la ejecucin del algoritmo cuando dicho conjunto contenga todos los vrtices del grafo sin necesidad de vaciar la pila. Orden en el que se visitan los vrtices: v1, v2, v3, v5, v6 y v4. Puede observarse que el rbol recubridor construido depende del vrtice de partida y del orden en el que se visiten los adyacentes al vrtice activo. rbol recubridor obtenido:

Borrego Ropero Rafael Recio Domnguez Daniel

89 de 248

Manual de algortmica

Bsqueda en anchura (BFS) .

El algoritmo de recorrido en anchura, en ingls breadth-first search y que denotaremos BFS para abreviar, al igual que el algoritmo de bsqueda en profundidad permite obtener un rbol recubridor donde los vrtices son recorridos por niveles. Al igual que en el caso anterior, si el grafo es conexo se encuentra el rbol recubridor, el cual no es nico, depender del vrtice de partida el orden en que se visitan los vrtices adyacentes al vrtice activo. El algoritmo puede implementarse mediante una cola, de tal forma que el vrtice activo o a partir del cual se expande el rbol siempre se encuentra en la cabeza de la cola. En cada paso se introduce en la cola unos de los vrtices adyacentes al vrtice activo, aadindose al rbol recubridor la arista que une el vrtice activo con dicho adyacente. Los vrtices adyacentes son introducidos por el final de la cola de tal forma que el vrtice activo no cambia, hasta que este se queda sin adyacentes, en este momento el vrtice es extrado de la cola y se repite el proceso con el resto de vrtices, hasta que todos los vrtices del grafo han sido visitados. Seguidamente detallaremos los pasos del algoritmo en un ejemplo. Ejemplo

Borrego Ropero Rafael Recio Domnguez Daniel

90 de 248

Manual de algortmica Aplicaremos el algoritmo de bsqueda en anchura comenzando por el vrtice v1. Cola v1 v2v1 v4 v2v1 v4 v2 v4 v2 v3v4 v2 v3v4 v3 v5 v3 v5 Cola vaca Vrtices v2 v4 v6 * v3 * * v5 * * * Aristas v1 v2 v1 v4 v1 v6 * v2v3 * * v3 v5 * * * Visitados v1 v2 v1 v2 v4 v1 v2 v4 v6 v1 v2 v4 v6 v1 v2 v4 v6 v3 v1 v2 v4 v6 v3 v1 v2 v4 v6 v3 v1 v2 v4 v6 v3 v5

La columna de vrtices visitados puede ser til para no introducir en la cola vrtices considerados anteriormente. Adems afinando un poco mas y aprovechado el conjunto de vrtices visitados podemos para la ejecucin del algoritmo cuando dicho conjunto contenga todos los vrtices del grafo sin necesidad de vaciar la cola. Orden en el que se visitan los vrtices: v1, v2, v4, v6, v3 y v5. Puede observarse que el rbol recubridor construido depende del vrtice de partida y del orden en el que se visiten los adyacentes al vrtice activo.

rbol recubridor obtenido:

Borrego Ropero Rafael Recio Domnguez Daniel

91 de 248

Manual de algortmica

3.5.- rboles recubridores de peso mnimo.


Se han implementado dos algoritmos que devuelven un rbol recubridor o un bosque de peso mnimo si el grafo no es conexo.

Algoritmo de Boruvka.

El algoritmo de Boruvka obtiene un rbol recubridor mnimo en un grafo G ponderado y conexo (no se admiten ponderaciones negativas). El algoritmo de Boruvka consiste en elegir desde cada vrtice la arista de menor peso que sale de l, y as formar al inicio un conjunto de componentes de vrtices unidos por dichas aristas. A partir de entonces en cada paso se busca la arista de menor peso entre los vrtices de cada componente y un vrtice que no lo sea, es decir, cada componente se unir a otra distinta. El algoritmo termina cuando todos los vrtices del grafo pertenecen a la misma componente. A este algoritmo tambin se le denomina "el algoritmo de las burbujas". El grafo se cubre por una coleccin de burbujas y en cada paso cada burbuja se adhiere a su burbuja ms cercana. Aplicar Boruvka al siguiente grafo ponderado y conexo.

Borrego Ropero Rafael Recio Domnguez Daniel

92 de 248

Manual de algortmica Paso 1

Elegimos de cada vrtice la arista de menor para formar un conjunto de componentes de vrtices.

Borrego Ropero Rafael Recio Domnguez Daniel

93 de 248

Manual de algortmica Paso 2

Buscamos las aristas de menor peso entre vrtices de componentes distintas.

Como el grafo ya es conexo el algoritmo termina. El peso del rbol recubridor es 16.

Borrego Ropero Rafael Recio Domnguez Daniel

94 de 248

Manual de algortmica Veamos otro ejemplo.

Paso 1

Elegimos de cada vrtice la arista de menor para formar un conjunto de componentes de vrtices.

Borrego Ropero Rafael Recio Domnguez Daniel

95 de 248

Manual de algortmica Paso 2

Buscamos las aristas de menor peso entre vrtices de componentes distintas.

Repetimos dicho proceso hasta que el grafo sea conexo.

Borrego Ropero Rafael Recio Domnguez Daniel

96 de 248

Manual de algortmica

El grafo ya es conexo por lo que el algoritmo termina. El peso del rbol recubridor es 66.

Borrego Ropero Rafael Recio Domnguez Daniel

97 de 248

Manual de algortmica

Algoritmo de Prim.

El algoritmo de Prim obtiene un rbol recubridor mnimo en un grafo G ponderado (no se admiten ponderaciones negativas) y conexo. La implementacin del algoritmo se ha realizado partiendo de un vrtice que puede proporcionar el usuario, aunque no es obligatorio. Adems sea cual sea el vrtice de partida el rbol recubridor siempre tendr el mismo peso mnimo. El algoritmo comienza con un vrtice y en cada interaccin aade al grafo una arista de peso mnimo la cual tiene como origen un vrtice perteneciente al rbol parcialmente construido y como destino un vrtice perteneciente al grafo G y que no formaba parte del rbol, de tal forma que no pueda insertarse ningn ciclo. Dicho proceso se lleva a cabo hasta que todos los vrtices de G han sido visitados. Veamos un ejemplo:

Aplicar Prim al siguiente grafo ponderado y conexo.

Borrego Ropero Rafael Recio Domnguez Daniel

98 de 248

Manual de algortmica Como vrtice de partida tomaremos el vrtice v1.

T0 = { v1}. T1 = T0 + {v1, v6}. T2 = T1 + {v1, v4}. T3 = T2 + {v4, v7}. T4 = T3 + { v4, v5}. T5 = T4 + { v3, v5}. T6 = T5 + { v2, v4}. T7 = T6 + { v5, v8}. Peso del rbol recubridor = 16.

rbol recubridor obtenido:

Borrego Ropero Rafael Recio Domnguez Daniel

99 de 248

Manual de algortmica

Algoritmo de Kruskal.

El algoritmo de Kruskal obtiene un rbol recubridor de peso mnimo en un grafo G ponderado (no se admiten ponderaciones negativas) y conexo. Si el grafo G no es conexo obtiene un bosque de peso mnimo. Como paso previo se realiza un preprocesamiento a las aristas del grafo ordenndolas de menor a mayor segn su ponderacin. En cada iteracin se aade una arista de peso mnimo que no forme ciclo con el rbol recubridor parcialmente construido. Dicho algoritmo se ha implementado mediante tcnicas de programacin dinmica haciendo uso de una tabla en la que se van realizando una serie de clculos previos para encontrar el rbol recubridor de peso mnimo. Para llevar a cabo la implementacin se ha usado una tabla bidimensional con la cual tiene un nmero de columnas igual al nmero de aristas del grafo ms uno y el nmero de columna igual al nmero de vrtices. Adems haremos uso de dos variables m y M para almacenar el valor de la componente de menor y mayor respectivamente. Para rellenar la tabla se debe siguientes los siguientes pasos. Paso 1 La primera fila se rellena con el nmero de fila correspondiente al vrtice en la matriz de adyacencias. El resto de filas se corresponden con las aristas ordenadas de menor a mayor peso. Paso 2 Ahora rellenaremos las filas correspondientes con las aristas. Sea una arista e1 que une los vrtice u y v. En la fila anterior obtenemos el valor correspondiente a la columna que indique u y v mediante la fila o columna correspondiente a la matriz de adyacencias del grafo. El valor mximo se almacena en M y el valor mnimo en m. Si ambos valores son distintos entonces la arista forma parte del rbol recubridor puesto que al aadirla no se introduce ningn ciclo.

Borrego Ropero Rafael Recio Domnguez Daniel

100 de 248

Manual de algortmica A continuacin podemos rellenar la fila correspondiente a dicha arista teniendo en cuenta los valores calculados en la fila anterior. Para obtener los valores de la fila correspondientes a la arista copiamos los valores de la fila anterior excepto cuando el valor de la fila anterior sea igual a M en cuyo caso se machara con el valor de la componente de menor m. Este proceso se repite hasta que terminemos con todas las aristas del grafo.

Veamos un ejemplo:

Aplicar Kruskal al siguiente grafo ponderado y conexo.

Borrego Ropero Rafael Recio Domnguez Daniel

101 de 248

Manual de algortmica M arista comp(v1) comp(v2) comp(v3) comp(v4) comp(v5) comp(v6) comp(v7) comp(v8) m 1 2 3 4 5 6 7 8 * * * e1={v1,v6} 1 2 3 4 5 1 7 8 1 6 e1 e2={v4,v5} 1 2 3 4 4 1 7 8 4 5 e2 e3={v4,v7} 1 2 3 4 4 1 4 8 4 7 e3 e4={v1,v4} 1 2 3 1 1 1 1 8 1 4 e4 1 2 1 1 1 1 1 8 1 3 e5 e5={v3,v5} e6={v4,v6} 1 2 1 1 1 1 1 8 * * * 1 2 1 1 1 1 1 8 * * * e7={v5,v7} e8={v2,v4} 1 1 1 1 1 1 1 8 1 2 e8 1 1 1 1 1 1 1 8 * * * e9={v6,v7} e10={v5,v8} 1 1 1 1 1 1 1 1 1 8 e10 arista rbol recubridor de peso mnimo obtenido. El peso del rbol recubridor es 16.

Borrego Ropero Rafael Recio Domnguez Daniel

102 de 248

Manual de algortmica

3.6.- Prufer
Algoritmo de codificacin.

Una secuencia de Prfer de longitud n-2 para n2 es cualquier secuencia de enteros entre 1 y n, permitiendo repeticiones. El algoritmo de codificacin que se presenta aqu, parte de un rbol (grafo) para dar lugar a una secuencia de Prfer que lo determina unvocamente. Como observacin se puede comprobar que el grado de cada uno de los vrtices es uno ms que el nmero de veces que su etiqueta aparece en la secuencia de Prfer. El algoritmo recibe como entrada un rbol A de n vrtices y retorna una secuencia S de n-2 vrtices.

Implementacin: func codificacinPrufer (g: Grafo) dev(S: secuencia de vrtices) var a: entero prin S := <inicializar a vaca> // Nmero de aristas del grafo. a := g.obtenerNmeroAristas() mientras a-1 > 0 Encontrar un vrtice v de A de grado 1. Sea v-w la arista que incide en v. Introducir w en S. Eliminar la arista v-w del grafo. a := a-1

Borrego Ropero Rafael Recio Domnguez Daniel

103 de 248

Manual de algortmica fmientras fin La bsqueda del vrtice de grado 1 (hoja) se realiza en la matriz de adyacencias del grafo comenzando de izquierda a derecha y de arriba abajo a partir de la fila correspondiente al vrtice v. Una vez que se encuentra la hoja w eliminamos arista formada por los vrtices v-w para no volver a tenerla en cuenta. Para determinar si un vrtice es hoja sumamos la fila correspondiente a dicho vrtice, si el valor de la suma es 1 se trata de una hoja.

Obtener la codificacin de Prfer del siguiente rbol.

Matriz de adyacencias del grafo. v1 v2 v3 v4 v5 v6 v7 v1 v2 0 1 1 0 1 1 1 1 1 v3 1 0 v4 1 0 v5 1 0 v6 1 0 v7 1 0

Borrego Ropero Rafael Recio Domnguez Daniel

104 de 248

Manual de algortmica La primera hoja encontrada es el vrtice v3 y v3-v1 es la arista que incide en v3. Eliminamos dicha arista y aadimos v1 a la secuencia. S = {v1}. v1 0 1 1 v2 1 0 1 1 v3 0 v4 0 v5 1 0 v6 1 0 v7 1 0

v1 v2 v3 v4 v5 v6 v7

El rbol nos quedara

Borrego Ropero Rafael Recio Domnguez Daniel

105 de 248

Manual de algortmica La primera hoja encontrada es el vrtice v4 y v4-v2 es la arista que incide en v4. Eliminamos dicha arista y aadimos v2 a la secuencia. S = {v1, v2}.

v1 v2 v3 v4 v5 v6 v7

v1 v2 0 1 1 0 1 1 1 1

v3 0

v4 1 0

v5 1 0

v6 1 0

v7 1 0

El rbol nos quedara

Borrego Ropero Rafael Recio Domnguez Daniel

106 de 248

Manual de algortmica La primera hoja encontrada es el vrtice v5 y v5-v1 es la arista que incide en v5. Eliminamos dicha arista y aadimos v1 a la secuencia. S = {v1, v2, v1}.

v1 v2 v3 v4 v5 v6 v7

v1 0 1

v2 1 0 1 1

v3 0

v4 0

v5 0

v6 1 0

v7 1 0

El rbol nos quedara

Borrego Ropero Rafael Recio Domnguez Daniel

107 de 248

Manual de algortmica La primera hoja encontrada es el vrtice v6 y v6-v2 es la arista que incide en v6. Eliminamos dicha arista y aadimos v2 a la secuencia. S = {v1, v2, v1, v2}.

v1 v2 v3 v4 v5 v6 v7

v1 0 1

v2 1 0 1

v3 0

v4 0

v5 0

v6 0

v7 1 0

El rbol nos quedara

Borrego Ropero Rafael Recio Domnguez Daniel

108 de 248

Manual de algortmica La primera hoja encontrada es el vrtice v7 y v7-v2 es la arista que incide en v7. Eliminamos dicha arista y aadimos v2 a la secuencia. S = {v1, v2, v1, v2, v2}.

v1 v2 v3 v4 v5 v6 v7

v1 0 1

v2 1 0

v3 0

v4 0

v5 0

v6 0

v7 0

El rbol nos quedara

Como el tamao de la secuencia es n-2 el algoritmo termina, siendo n el nmero de vrtices del rbol el algoritmo termina.

Borrego Ropero Rafael Recio Domnguez Daniel

109 de 248

Manual de algortmica

Algoritmo de decodificacin.

El procedimiento de decodificacin siguiente convierte una secuencia de Prfer en su correspondiente rbol. Tn Este procedimiento de decodificacin establece una funcin fd: Pn-2 que hace corresponder a un conjunto de secuencias de Prfer de longitud n-2 un conjunto de rboles de n vrtices. El algoritmo recibe como entrada el nmero de vrtices n que debe tener el rbol a generar y una secuencia S de n-2 vrtices. Los vrtices de la secuencia forman parte del rbol y pueden estar repetidos. A partir de la secuencia proporcionada se genera un rbol. El algoritmo podemos dividirlo en X pasos.

PASO 1

Crear un grafo G con n vrtices. (Sin aristas).

PASO 2

2.1.- Calcular el conjunto de vrtices que no forma parte de la secuencia NS. 2.2.- Calcular el conjunto de vrtices ocupados VO. 2.3.- Obtener la diferencia entre ambos conjuntos NS VO.

PASO 3

Si la secuencia es vaca insertamos una arista formada por los dos vrtices incluidos en NS VO y FIN. En otro caso insertamos la arista que tiene como origen el primer vrtice de la secuencia y como destino el primer vrtice de la diferencia NS VO. Seguidamente eliminar el primer vrtice de la secuencia y volver al PASO 2.

Borrego Ropero Rafael Recio Domnguez Daniel

110 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

111 de 248

Manual de algortmica Veamos el siguiente ejemplo:

Sea n = 7 y la secuencia S = {v1, v2, v4, v6, v2}.

PASO 1

Sea G el grafo:

Borrego Ropero Rafael Recio Domnguez Daniel

112 de 248

Manual de algortmica PASO 2.1

Secuencia

S = {v1, v2, v4, v6, v2}. NS = {v3, v5, v7}.

Vrtices no incluidos en la secuencia Vrtices ocupados VO = {}.

PASO 3.1

Como la secuencia no est vaca formamos una arista que posee como origen el primer vrtice de la secuencia y como destino el primer vrtice de la diferencia entre NS y VO. Calculamos la diferencia entre NS y VO. NS VO = {v3, v5, v7}. Insertamos en G la nueva arista secuencia. v1-v3 y eliminamos v1 de la

Borrego Ropero Rafael Recio Domnguez Daniel

113 de 248

Manual de algortmica

PASO 2.2

Secuencia

S = {v2, v4, v6, v2}. NS = {v1, v3, v5, v7}.

Vrtices no incluidos en la secuencia Vrtices ocupados VO = {v3}. PASO 3.2

Como la secuencia no est vaca formamos una arista que posee como origen el primer vrtice de la secuencia y como destino el primer vrtice de la diferencia entre NS y VO. Calculamos la diferencia entre NS y VO. NS VO = {v1, v5, v7}. Insertamos en G la nueva arista secuencia. v2-v1 y eliminamos v2 de la

Borrego Ropero Rafael Recio Domnguez Daniel

114 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

115 de 248

Manual de algortmica

PASO 2.3

Secuencia

S = {v4, v6, v2}.

Vrtices no incluidos en la secuencia NS = {v1, v3, v5, v7}. Vrtices ocupados VO = {v1, v3}. PASO 3.3

Como la secuencia no est vaca formamos una arista que posee como origen el primer vrtice de la secuencia y como destino el primer vrtice de la diferencia entre NS y VO. Calculamos la diferencia entre NS y VO. NS VO = {v5, v7}. Insertamos en G la nueva arista secuencia. v4-v5 y eliminamos v4 de la

Borrego Ropero Rafael Recio Domnguez Daniel

116 de 248

Manual de algortmica PASO 2.4

Secuencia

S = {v6, v2}.

Vrtices no incluidos en la secuencia NS = {v1, v3, v4, v5, v7}. Vrtices ocupados VO = {v1, v3, v5}. PASO 3.4

Como la secuencia no est vaca formamos una arista que posee como origen el primer vrtice de la secuencia y como destino el primer vrtice de la diferencia entre NS y VO. Calculamos la diferencia entre NS y VO. NS VO = {v4, v7}. Insertamos en G la nueva arista secuencia. v6-v4 y eliminamos v6 de la

Borrego Ropero Rafael Recio Domnguez Daniel

117 de 248

Manual de algortmica PASO 2.5

Secuencia

S = {v2}.

Vrtices no incluidos en la secuencia NS = {v1, v3, v4, v5, v6, v7}. Vrtices ocupados VO = {v1, v3, v4, v5}. PASO 3.5

Como la secuencia no est vaca formamos una arista que posee como origen el primer vrtice de la secuencia y como destino el primer vrtice de la diferencia entre NS y VO. Calculamos la diferencia entre NS y VO. NS VO = {v6, v7}. Insertamos en G la nueva arista secuencia. v2-v6 y eliminamos v2 de la

Borrego Ropero Rafael Recio Domnguez Daniel

118 de 248

Manual de algortmica PASO 2.6

Secuencia

S = {}.

Vrtices no incluidos en la secuencia NS = {v1, v2, v3, v4, v5, v6, v7}. Vrtices ocupados VO = {v1, v3, v4, v5, v6}. PASO 3.6

Como la secuencia est vaca solo nos falta insertar una arista. Los vrtices que forman parte de la misma se obtienen calculando la diferencia entre NS y VO. Calculamos la diferencia entre NS y VO. NS VO = {v2, v7}. Insertamos en G la nueva arista v2-v7 y FIN.

Borrego Ropero Rafael Recio Domnguez Daniel

119 de 248

Manual de algortmica

3.7.- Algoritmo de emparejamientos


Un emparejamiento de un grafo simple G, es cualquier subgrafo 1-regular de G, es decir un subgrafo inducido por las aritas dos a dos no incidentes entre s) Un emparejamiento mximo en un grafo G es cualquier emparejamiento de G de orden mximo, es decir, con el mayor nmero de vrtices posibles. Un emparejamiento maximal de peso ptimo en un grafo G es un emparejamiento de G de orden mximo donde la suma de las ponderaciones de las aristas es mxima o mnima. Un emparejamiento es completo o perfecto si tiene exactamente p/2 aristas, siendo p el orden del grafo. Sea M un emparejamiento, se denomina arista emparejada respecto de M a cada una de las aristas de G que estn en M. Si dicha arista no esta en M se dice que no esta emparejada. Se llaman vrtice emparejado con respecto a M a cada uno de los vrtices incidentes con alguna arista de M, en otro caso se trata de un vrtice no emparejado. Una vez que tenemos claros los conceptos anteriores comentaremos los tres algoritmos de emparejamientos.

Borrego Ropero Rafael Recio Domnguez Daniel

120 de 248

Manual de algortmica

Algoritmo de emparejamiento maximal simple

La implementacin del algoritmo trata de buscar un emparejamiento mediante un camino alternado. Se denomina camino alternado de G con respecto a M a un camino de G cuyas aristas son alternativamente emparejadas y no emparejada. En cada paso se escoge un vrtice no emparejado y busca un camino alternado aumentante mediante BFS. En el camino no pueden a parecer vrtices repetidos. Dicho camino deja de expandirse en cuanto encontremos un vrtice de G que no haya sido emparejado. Repetimos este proceso para el resto de vrtice del grafo. Al final obtendremos un emparejamiento maximal que puede ser completo si todos los vrtices del grafo han sido emparejados. Veamos un ejemplo:

Borrego Ropero Rafael Recio Domnguez Daniel

121 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

122 de 248

Manual de algortmica Comenzamos por el vrtice v1 formado por las aristas. y construimos el camino alternado

M = {v1, v6}. A continuacin pasamos al vrtice v2. M = {v2, v8}.

Para el vrtice v3 = {v3,v7}

Borrego Ropero Rafael Recio Domnguez Daniel

123 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

124 de 248

Manual de algortmica Para el vrtice v4 = {v4, v9}.

Para el vrtice v5 = {{v5, v9}, {v4, v6}, {v1, v7}, {v2, v8}, {v3, v10}}

Borrego Ropero Rafael Recio Domnguez Daniel

125 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

126 de 248

Manual de algortmica Finalmente el emparejamiento nos queda.

Borrego Ropero Rafael Recio Domnguez Daniel

127 de 248

Manual de algortmica

Algoritmo de Kuhn-Munkres

Se trata de un algoritmo de emparejamiento de peso mximo para grafos ponderados, bipartitos y completos. Los grafos bipartitos completos km,n, son grafos de (n + m) vrtices y (m * n) aristas que admiten una particin de sus vrtices en sendos conjuntos V y U de m y n vrtices respectivamente, de manera que cada uno de los m vrtices de V es adyacente a todos y cada uno de los n vrtices de U. Se denominan bipartitos completos porque no se pueden aadir arista alguna sin que deje de ser bipartito. Otro concepto importante es el de matriz de pesos del grafo. Se trata de una matriz que posee tantas filas y columnas como elementos tiene los conjuntos X e Y respectivamente. Cada posicin de la matriz almacena la ponderacin de una arita cuyo origen pertenece al conjunto X y el destino al conjunto Y. Ahora explicaremos de forma detallada los cuatro pasos en los que hemos dividido el algoritmo.

PASO 1

P.1.1.- Identificar los conjuntos V y U de vrtices. P.1.2.- Obtener la matriz de pesos del grafo MatrizPesos. Sean i y j los ndices para iterar por la matriz de pesos del grafo. P.1.3.- Consideremos las tuplas L(vi) y L(uj) con un tamao igual al nmero de vrtices que forman parte del conjunto V y U respectivamente. Inicializamos las tuplas con un etiquetado viable L(vi) se inicializa con el mximo de la fila correspondiente al vrtice vi en MatrizPesos[i, j] con (j <= | V |) (cardinal de V). L(uj) se inicializa a cero para todo uj.

Borrego Ropero Rafael Recio Domnguez Daniel

128 de 248

Manual de algortmica PASO 2

Seguidamente construimos un grafo que verifique la expresin: L(uj) + L(vi) = MatrizPesos[i, j]. var G: Grafo. I, j: enteros prin G := <inicializamos el grafo> // Iteramos sobre la matriz de pesos del grafo, si se cumple la expresin // incluimos la arista al grafo g con la ponderacin correspondiente. desde i := 0 hasta | V | desde j := 0 hasta | U | si L(uj) + L(vi) = MatrizPesos[i, j] G.aadirArista(u, v, MatrizPesos[i, j]) fsi fdesde fdesde fin

PASO 3

P.3.1.- Buscamos un emparejamiento mximo M en el grafo G con el algoritmo de emparejamiento maximal simple. P.3.2.- Si cada vrtice de V est emparejado con respecto a M, entonces retorna M y FIN.

Borrego Ropero Rafael Recio Domnguez Daniel

129 de 248

Manual de algortmica PASO 4

A continuacin cambiamos las etiquetas de los conjuntos L(vi) y L(uj). Sea V(T) los vrtices del el primer camino alternado enraizado en un vrtice no emparejado del conjunto V que no puede ser extendido ms en G. P.4.1.- Para ello obtenemos los siguientes conjuntos. I = V V(T). D = U V(T).

P.4.2.- Calculamos el valor que minimiza la expresin: L(vi) + L(uj) MatrizPesos[i, j] con vi y ui pertenecientes a los conjuntos I y D respectivamente.

P.4.3.- Finalmente cambiamos el etiquetado. Para cada vrtice vi perteneciente a la interseccin restamos el valor del mnimo en L(vi). Para cada vrtice ui no perteneciente a la diferencia sumamos el valor del mnimo en L(ui). Volvemos al PASO 2.

Borrego Ropero Rafael Recio Domnguez Daniel

130 de 248

Manual de algortmica Consideremos el siguiente grafo al cual aplicaremos el algoritmo de Kuhn-Munkres.

PASO 1 Identificamos los conjuntos U y V. U = {u1, u2, u3, u4, u5}. V = {v1, v2, v3, v4, v5}. Matriz de pesos del grafo, L(vi) y L(uj)

V/U v1 v2 v3 v4 v5 L(uj)

u1 5 0 2 2 6 0

u2 1 1 5 2 2 0

u3 1 3 4 3 0 0

u4 3 3 3 4 0 0

u5 2 4 0 4 1 0

L(vi) 5 4 5 4 6

Borrego Ropero Rafael Recio Domnguez Daniel

131 de 248

Manual de algortmica PASO 2.1

Construimos un grafo G2.1 que verifique la expresin L(uj) + Lv(vi) = MatrizPesos[i, j].

Borrego Ropero Rafael Recio Domnguez Daniel

132 de 248

Manual de algortmica PASO 3.1

Buscamos un emparejamiento mximo en G2.1.

Como no se ha conseguido un emparejamiento mximo para los vrtices del conjunto V cambiamos el etiquetado.

Borrego Ropero Rafael Recio Domnguez Daniel

133 de 248

Manual de algortmica PASO 4.1

v5 es el primer vrtice no emparejado perteneciente a V. V(T) es el conjunto de vrtices del rbol alternado enraizado en v5 que no puede ser extendido ms. V(T) = {v5, v1, u1}. Calculamos los siguientes conjuntos. V V(T) = {v5, v1}. V V(T) = {u2, u3, u4, u5}. Minimizamos la expresin L(uj) + L(vi) MatrizPesos[i, j] para los vrtices que forman parte de los conjuntos I y D. L(v5) + L(u2) - 2 = 4. L(v5) + L(u3) - 0 = 6. L(v5) + L(u4) - 0 = 6. L(v5) + L(u5) - 1 = 5. L(v1) + L(u2) - 1 = 4. L(v1) + L(u3) - 1 = 4. L(v1) + L(u4) - 3 = 2. L(v1) + L(u5) - 2 = 3. El mnimo es 2. Ahora restamos el valor del mnimo a los vrtices que forman parte del conjunto I en L(vi) y sumamos el valor del mnimo a los vrtices que no forman parte del conjunto D en L(uj). Y volvemos al paso 2 V/U v1 v2 v3 v4 v5 u1 5 0 2 2 6 u2 1 1 5 2 2 u3 1 3 4 3 0 u4 3 3 3 4 0 u5 2 4 0 4 1 L(vi) 3 4 5 4 4

Borrego Ropero Rafael Recio Domnguez Daniel

134 de 248

Manual de algortmica L(uj) 2 0 0 0 0

Borrego Ropero Rafael Recio Domnguez Daniel

135 de 248

Manual de algortmica PASO 2.2

Construimos un grafo G2.2 que verifique la expresin L(uj) + Lv(vi) = MatrizPesos[i, j].

Como no se ha conseguido un emparejamiento mximo para los vrtices del conjunto V cambiamos el etiquetado.

Borrego Ropero Rafael Recio Domnguez Daniel

136 de 248

Manual de algortmica PASO 3.2

Buscamos un emparejamiento mximo en G2.2.

Borrego Ropero Rafael Recio Domnguez Daniel

137 de 248

Manual de algortmica PASO 4.2

v5 es el primer vrtice no emparejado perteneciente a V. V(T) es el conjunto de vrtices del rbol alternado enraizado en v5 que no puede ser extendido ms. V(T) = {v5, v1, u1, v4, u4, v2, u5}. Calculamos los siguientes conjuntos. V V(T) = {v5, v1, v4, v2}. V V(T) = {u2, u3}. Minimizamos la expresin L(uj) + L(vi) MatrizPesos[i, j] para los vrtices que forman parte de los conjuntos I y D. L(v5) + L(u2) - 2 = 4. L(v5) + L(u3) - 0 = 4. L(v1) + L(u2) - 1 = 2. L(v1) + L(u3) - 1 = 2. L(v4) + L(u2) - 2 = 2. L(v4) + L(u3) - 3 = 1. L(v2) + L(u2) - 1 = 3. L(v2) + L(u3) - 3 = 1. El mnimo es 1. Ahora restamos el valor del mnimo a los vrtices que forman parte del conjunto I en L(vi) y sumamos el valor del mnimo a los vrtices que no forman parte del conjunto D en L(uj). Y volvemos al paso 2 V/U v1 v2 v3 v4 v5 u1 5 0 2 2 6 u2 1 1 5 2 2 u3 1 3 4 3 0 u4 3 3 3 4 0 u5 2 4 0 4 1 L(vi) 2 3 5 3 3

Borrego Ropero Rafael Recio Domnguez Daniel

138 de 248

Manual de algortmica L(uj) 3 0 0 1 1

Borrego Ropero Rafael Recio Domnguez Daniel

139 de 248

Manual de algortmica PASO 2.3

Construimos un grafo G2.3 que verifique la expresin L(uj) + Lv(vi) = MatrizPesos[i, j].

Borrego Ropero Rafael Recio Domnguez Daniel

140 de 248

Manual de algortmica PASO 3.3

Buscamos un emparejamiento mximo en G2.3.

Como todos los vrtices del conjunto V estn emparejados el algoritmo termina. El peso del emparejamiento es 21.

Borrego Ropero Rafael Recio Domnguez Daniel

141 de 248

Manual de algortmica

Algoritmo de Kuhn-Munkres con preprocesamiento (peso mnimo).

El algoritmo de Kuhn-Munkres se utiliza para obtener un emparejamiento de peso mximo en un grafo bipartito, ponderado y completo. Tambin podemos usarlo para obtener el emparejamiento de peso mnimo aunque previamente es necesario realizar un preprocesamiento a las ponderaciones de las aristas del grafo. El preprocesamiento cambia las ponderaciones de las aristas manteniendo la relacin de orden, pero las aristas que antes eran mnimas ahora son mximas por lo que bastara aplicar el algoritmo de Kuhn-Munkres y deshacer los cambios en las ponderaciones de las aristas para obtener el emparejamiento de peso mnimo.

PREPROCESAMIENTO.

1.- Calcular la ponderacin mxima de todas las aristas del grafo.

2.- Para cada arista cambiamos su peso por: | PesoArista PonderacinMaxima |.

3.- Finalmente aplicamos el algoritmo de Kuhn-Munkres y obtenemos el emparejamiento de peso mnimo.

Borrego Ropero Rafael Recio Domnguez Daniel

142 de 248

Manual de algortmica Encontrar el emparejamiento de peso mnimo en el siguiente grafo.

Realizar el preprocesamiento. La arista v5u1 es la que posee mayor ponderacin en el grafo. Su peso es 6.

Borrego Ropero Rafael Recio Domnguez Daniel

143 de 248

Manual de algortmica Ahora cambiamos las ponderaciones de las aristas.

A continuacin aplicaremos el algoritmo de Kuhn-Munkres obteniendo un emparejamiento de peso mximo que nos dar las aristas de peso mnimo cuando deshagamos los cambios realizados en el preprocesamiento. Aristas del emparejamiento de peso mximo: Arista (v1, u3, 5). Arista (v2, u1, 6). Arista (v3, u5, 6). Arista (v4, u2, 4). Arista (v5, u4, 6). El peso del emparejamiento es 27.

Borrego Ropero Rafael Recio Domnguez Daniel

144 de 248

Manual de algortmica Deshacemos los cambios en las ponderaciones obteniendo el peso original de las aristas. Aristas del emparejamiento de peso mnimo: Arista (v1, u3, 1). Arista (v2, u1, 0). Arista (v3, u5, 0). Arista (v4, u2, 2). Arista (v5, u4, 0). El peso del emparejamiento es 3.

Borrego Ropero Rafael Recio Domnguez Daniel

145 de 248

Manual de algortmica

Algoritmo de emparejamiento maximal de peso ptimo.

El problema de bsquedas de emparejamientos mximo de peso ptimo (mximo o mnimo) es un problema NP-completo. Aunque existen mtodos aproximados se ha optado por un algoritmo de bsqueda exhaustiva, implementado mediante la tcnica de backtracing. El esquema que implementa el backtracing:
proc btptimo(x: Etapa) var xsig: Etapa cand: Candidatos prin si (esSolucin(x)) si (esMejor()) actualizaSolucin() fsi fsi xsig := nuevaEtapa(x) cand := calculaCandidatos(x) mientras (quedanCandidatos(cand)) seleccionaCandidato(cand, xsig); si (esPrometedor(cand, xsig)) anotaSolucin(cand, xsig); btOptimo(xsig); cancelaAnotacin(cand, xsig); fsi fmientras fin

A continuacin comentaremos algunas caractersticas del problema que se pretende resolver y detallaremos cada uno de los mtodos y clases que hacen posible la bsqueda del emparejamiento de peso ptimo.

Borrego Ropero Rafael Recio Domnguez Daniel

146 de 248

Manual de algortmica Comenzaremos por la Clase Solucin Clase Solucin // Atributos emparejamientos: Array[][] de enteros. /// Almacena el peso del emparejamiento. pesoEmparejamiento: real /// Nmero de vrtices emparejados. numVrticesEmparejados: entero fclase La matriz emparejamientos se inicializa con 0 excepto la diagonal principal y posiciones en las que o existe aritas que se inicializa con infinito o menos infinito dependiendo si el emparejamiento buscado es de peso mnimo o mximo respectivamente. Adems a lo largo de la ejecucin almacena las parejas encontradas a las cuales les asignan un nmero que hace referencia al orden en el que se han encontrado. La profundidad al que se encuentra la solucin que viene determinada por el nmero mximo de vrtices que pueden ser emparejados, pero determinar esto en un grafo no es trivial, por ello en cada etapa marcamos la fila y columna de los vrtices emparejados con el valor de la etapa para que no vuelvan a ser considerados y saber cuando terminamos el proceso de bsqueda de parejas. Dicho proceso finaliza cuando la matriz emparejamientos no contiene ningn 0. Esto se comprueba en el mtodo esSolucin. Adems si emparejamiento buscado es de peso mnimo puede aplicarse una poda al rbol de expansin si hemos encontrado previamente una posible solucin. La poda de una rama se produce si el peso del emparejamiento encontrado es menor o igual que el peso del emparejamiento parcialmente construido. En dicho caso la rama no es examinada. Si por el contrario el emparejamiento buscado es de peso mximo ser necesario expandir el rbol completo, pues no es posible aplicar ninguna poda. Por otra parte como se trata de un problema de optimizacin una solucin se considera mejor otra, si existe un mayor nmero de vrtices emparejados o si el nmero de vrtices emparejados es igual en ambas soluciones se comprueba el peso y en funcin del tipo de emparejamiento se escoge la solucin de mayor o menor peso. Esta comprobacin se realiza en el mtodo esMejor. Cada vez que encontremos una solucin mejor

Borrego Ropero Rafael Recio Domnguez Daniel

147 de 248

Manual de algortmica actualizaremos la solucin obtenida hasta el momento, lo cual se realiza en el mtodo actualizaSolucin.

Clase Candidatos Clase Candidatos // Atributos vrticesSinPareja: Array[] de enteros; // ndice para iterar sobre el array de candidatos. i: entero fila: entero fclase

En el array vrticesSinPareja almacenamos las columnas de los vrtices que an no tienen parejas. El atributo fila indica la fila en la matriz de adyacencias donde se encontraron los vrtices candidatos. Los candidatos de una etapa son las columnas de los vrtices an no emparejados escogidos de la primera fila de la matriz emparejamientos en la que aparece un 0.

Clase Etapa // Atributos // Profundidad del rbol de expansin k: entero // Candidato actualmente procesado. i: entero fclase

El valor inicial de la etapa y candidato actualmente procesado comienzan en 0.

Borrego Ropero Rafael Recio Domnguez Daniel

148 de 248

Manual de algortmica Ahora detallaremos los atributos de la clase que da cuerpo a cada uno de los mtodos del esquema.

Clase EmparejamientoMaximalPesoOptimoBacktracking // Atributos // Matriz de adyacencias del grafo. adyacencias: Array[][] de real tipoEmparejamineto: Lgico // Fila del vrtice sin pareja. fila: entero // Columna del vrtice sin pareja columna: entero // Almacena las soluciones parciales encontradas sol: Solucin // Almacena la solucin ptima encontrada. solptima: Solucin fclase El atributo tipoEmparejamiento informa del tipo de emparejamiento buscado por el usuario. Si su valor es cierto buscamos un emparejamiento de peso mximo, en otro caso de peso mnimo. Por ltimo comentar algunos detalles del resto de mtodos del esquema. En el mtodo nuevaEtapa tan solo incrementamos el valor de la etapa actual. En quedanCandidatos se comprueba si el atributo i utilizado para iterar sobre el array verticesSinpareja que almacena los candidatos ha llegado al final del array. En selecionaCandidato actualizamos los atributos fila y columna del vrtice no emparejado. Adems se incrementa el ndice del candidato usado para iterar sobre el array que almacena los vrtices sin pareja y asignamos dicho valor al atributo que indica en la etapa el candidato que se esta procesando actualmente. En anotaSolucin se marca la fila y columna de los vrtices emparejados con el valor -k de la etapa. Por otra parte posicin de la matriz 2

Borrego Ropero Rafael Recio Domnguez Daniel

149 de 248

Manual de algortmica emparejamientos correspondiente al emparejamiento se marca con el valor k de la etapa indicando el orden en el que se ha encontrado la pareja. Tambin incrementamos en dos el nmero de vrtices emparejados y actualizamos el peso del emparejamiento parcialmente construido con el peso de la nueva arista considerada. Finalmente en cancelaAnotacin decrementamos el valor k y restauramos el valor del candidato actualmente de la etapa. Adems se restaura el valor de la fila y columna, se desmarcan la fila y columnas de los ltimos vrtices emparejados. Tambin restauramos el valor del peso del emparejamiento y vrtice emparejados con el valor que tenan antes de considerar la nueva pareja. En definitiva las tpicas operaciones que deben aparecer en toda vuelta atrs. A continuacin veremos un par de ejemplos donde encontrar el emparejamiento ptimo es trivial, pero son tiles para visualizar el rbol de expansin generado. Adems a la hora de mostrar los candidatos pondremos los propios vrtices en vez de la posicin que estos ocupan en la matriz de adyacencias. Emparejamiento mximo de peso mximo.

Borrego Ropero Rafael Recio Domnguez Daniel

150 de 248

Manual de algortmica

rbol de expansin: Etapa v1 v2 v3 v4 v1 0 0 0 v2 0 0 0 v3 0 0 0 v4 0 0 0

k=0

{v2, v3, v4} peso = 0

k=1

v1 v2 v3 v4

v1 -1 -1 -1

v2 1 -1 -1

v3 -1 -1 0

v4 -1 -1 0

v1 v2 v3 v4

v1 -1 -1 -1

v2 -1 -1 0

v3 1 -1 -1

v4 -1 0 -1

v1 v2 v3 v4

v1 -1 -1 -1

v2 -1 0 -1

v3 -1 0 -1

v4 1 -1 -1

{v4} peso = 2

{v4} peso = 10

{v3} peso = 4

k=2

v1 v2 v3 v4

v1 -1 -1 -1

v2 1 -1 -1

v3 -1 -1 -2

v4 -1 -1 2

v1 v2 v3 v4

v1 -1 -1 -1

v2 -1 -1 -2

v3 1 -1 -1

v4 -1 2 -1

v1 v2 v3 v4

v1 -1 -1 -1

v2 -1 -2 -1

v3 -1 2 -1

v4 1 -1 -1

peso = 5

peso = 14

peso = 9

El emparejamiento ptimo de peso mximo es 14. En este caso ha sido necesario expandir todo el rbol para obtener el emparejamiento de peso mximo con el mayor nmero de vrtices. Aristas del emparejamiento: Arista (v1, v3, 10) Arista (v2, v4, 4)

Borrego Ropero Rafael Recio Domnguez Daniel

151 de 248

Manual de algortmica Emparejamiento mximo de peso mnimo.

rbol de expansin: Etapa v1 v2 v3 v4 v1 0 0 0 v2 0 0 0 v3 0 0 0 v4 0 0 0

k=0

{v2, v3, v4} peso = 0

k=1

v1 v2 v3 v4

v1 -1 -1 -1

v2 1 -1 -1

v3 -1 -1 0

v4 -1 -1 0

v1 v2 v3 v4

v1 -1 -1 -1

v2 -1 -1 0

v3 1 -1 -1

v4 -1 0 -1

v1 v2 v3 v4

v1 -1 -1 -1

v2 -1 0 -1

v3 -1 0 -1

v4 1 -1 -1

{v4} peso = 2

{v4} peso = 10

{v3} peso = 4

k=2

v1 v2 v3 v4

v1 -1 -1 -1

v2 1 -1 -1

v3 -1 -1 -2

v4 -1 -1 2

v1 v2 v3 v4

v1 -1 -1 -1

v2 -1 -2 -1

v3 -1 2 -1

v4 1 -1 -1

peso = 5

peso = 9

El emparejamiento ptimo de peso mnimo es 5. En este caso no ha sido necesario expandir todo el rbol pues ya tenamos una solucin cuyo peso es 5 y por la segunda rama el emparejamiento parcialmente construido tiene peso 10 por lo que no es posible mejorar el emparejamiento encontrado inicialmente. Aristas del emparejamiento: Arista (v1, v2, 2)

Borrego Ropero Rafael Recio Domnguez Daniel

152 de 248

Manual de algortmica Arista (v3, v4, 3)

Borrego Ropero Rafael Recio Domnguez Daniel

153 de 248

Manual de algortmica Seguidamente un par de ejemplos para grafos con un mayor nmero de vrtices y aritas. Ejemplo 1.

Aristas del emparejamiento de peso mximo:

Arista (v1, u4, 3). Arista (v2, u3, 3). Arista (v3, u2, 5). Arista (v4, u5, 4). Arista (v5, u1, 6). El peso del emparejamiento es 21.

Borrego Ropero Rafael Recio Domnguez Daniel

154 de 248

Manual de algortmica Aristas del emparejamiento ptimo de peso mnimo:

Arista (v1, u3, 1). Arista (v2, u1, 0). Arista (v3, u5, 0). Arista (v4, u2, 2). Arista (v5, u4, 0). El peso del emparejamiento es 3.

Ejemplo 2.

Aristas del emparejamiento ptimo de peso mximo:

Arista (v1, v5, 4). Arista (v2, v6, 1). El peso del emparejamiento es 5.

Borrego Ropero Rafael Recio Domnguez Daniel

155 de 248

Manual de algortmica

Aristas del emparejamiento ptimo de peso mnimo:

Arista (v1, v4, 2). Arista (v2, v5, -1). El peso del emparejamiento es 1.

Borrego Ropero Rafael Recio Domnguez Daniel

156 de 248

Manual de algortmica

3.8.- Euler
Es euleriano ?.
Un grafo simple conexo es euleriano si y solo si todos los vrtices tienen valencia par. Si el grafo es dirigido y el grado de entrada y salida de cada vrtice de es igual entonces es euleriano. La implementacin del algoritmo hace distincin entre grafos simples y dirigidos. Si se trata de un grafo simple se suma las filas de la matriz de adyacencias para cada vrtice y si todos tienen valencia par entonces el grafo es euleriano. En caso contrario el grafo no es euleriano. Si el grafo es dirigido se calcula el grado de entrada sumado la fila y el grado de salida sumando la columna correspondiente al vrtice en la matriz de adyacencias del grafo. Si el grado de entrada y salida de todos los vrtices es igual entonces el grafo es euleriano.

A continuacin veremos dos ejemplos para cada tipo de grafo. Grafos simples. Ejemplo 1

Borrego Ropero Rafael Recio Domnguez Daniel

157 de 248

Manual de algortmica

Vrtices grado v1 4 v2 4 v3 4 v4 2 v5 2 v6 2 v7 2 Como todos los vrtices son de valencia par el grafo es euleriano.

Ejemplo 2.

Vrtices grado v1 3 v2 4 v3 4 v4 2 v5 2 v6 1

Borrego Ropero Rafael Recio Domnguez Daniel

158 de 248

Manual de algortmica Como el grafo posee dos vrtices impares no es euleriano.

Borrego Ropero Rafael Recio Domnguez Daniel

159 de 248

Manual de algortmica A continuacin expondremos los ejemplos para los grafos dirigidos. Grafos dirigidos. Ejemplo 1

Vrtices Entrada Salida v1 2 2 2 2 v2 v3 2 2 v4 2 2 v5 3 3 v6 2 2 v7 1 1 Como todos los vrtices tienen el grado de salida igual al grado de entrada el grafo es euleriano.

Borrego Ropero Rafael Recio Domnguez Daniel

160 de 248

Manual de algortmica Ejemplo 2

Vrtices Entrada Salida v1 2 2 v2 2 1 v3 2 1 v4 2 2 1 1 v5 Como existen vrtices cuyo grado de salida es distinto al grado de entrada el grafo no es euleriano.

Borrego Ropero Rafael Recio Domnguez Daniel

161 de 248

Manual de algortmica

3.9.- Algoritmos de bsqueda de trayectorias eulerianas.


Antes de comenzar a exponer los diversos algoritmos que tratan de buscar trayectorias eulerianas en los grafos debemos tener claro una serie de conceptos. Comenzaremos definiendo el concepto de trayectoria como una sucesin de vrtices con la propiedad de que cada vrtice es adyacente al siguiente y tal que en la correspondiente sucesin de aristas todas son distintas. Adems esta permitido que un vrtice aparezca ms de una vez. Si dicha trayectoria comienza y termina en el mismo vrtice tenemos un circuito. Una vez definido el concepto general de trayectoria nos centraremos en las trayectorias eulerianas la cual recorre todas las aristas de un grafo conexo. Anlogamente si termina y comienza en el mismo vrtice se trata de un circuito euleriano. A continuacin comentaremos tres algoritmos que se encargan de buscar trayectorias eulerianas. Para que en un grafo conexo exista una trayectoria euleriana es necesario que el grafo no posea ms de dos vrtices de valencia impar, por lo que si un grafo conexo que tiene exactamente dos vrtices de valencia impar tiene al menos una trayectoria euleriana. Cualquier trayectoria de Euler debe comenzar en uno de los vrtices de grado impar y finalizar en el otro. Sin embargo para que exista al menos un circuito euleriano todos los vrtices deben tener grado par y el circuito puede construirse partiendo desde cualquier vrtice.

Algoritmo de Fleury

El algoritmo de Fleury trata de buscar una trayectoria euleriana en un grafo conexo y en el que no existen ms de dos vrtices de grado impar. La implementacin del algoritmo se ha realizado mediante tcnicas de programacin dinmica combinada con voraz. La heurstica seguida para encontrar la trayectoria euleriana es la siguiente. Se comprueba que previamente que el grafo satisface las condiciones para que exista dicha trayectoria.

Borrego Ropero Rafael Recio Domnguez Daniel

162 de 248

Manual de algortmica

Seguidamente no situamos en unos de los vrtices impares si existen o en caso contrario uno cualquiera de grado par. A continuacin de todos los vrtices adyacentes respecto al que estamos situados escogemos el primero segn orden existente en la matriz de adyacencias y al ser posible que no sea una arista puente salvo que no exista ninguna otra alternativa. Una vez seleccionada la arista, esta no vuelve a tenerse en cuenta por lo que es como si la hubiramos eliminado del grafo. Repetimos este proceso hasta recorrer todas las aristas del grafo, pudiendo repetir vrtices. Si el grafo es no dirigido la trayectoria se encuentra sin problemas, sin embargo en grafos dirigidos puede no encontrarse dicha trayectoria si el grafo posee ms de un vrtice impar. En este caso lo nico que podemos hacer es relanzar la bsqueda partiendo del otro vrtice impar. Veamos algunos ejemplos: Encontrar una trayectoria euleriana en el siguiente grafo no dirigido.

Vrtices Grado v1 2 2 v2 v3 3 v4 3 v5 2 v6 2

Borrego Ropero Rafael Recio Domnguez Daniel

163 de 248

Manual de algortmica v7 2

Como posee dos vrtices impares y el grafo es no dirigido posee una trayectoria euleriana abierta. Los vrtices impares son v3 y v4. Comenzamos por el primer vrtice impar v3. v3 v1

v3

v1

v2

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

164 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

165 de 248

Manual de algortmica v3 v1 v2 v3

La ltima arista tomada es puente, pues no existe ninguna alternativa.

v3

v1

v2

v3

v4

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

166 de 248

Manual de algortmica v3 v1 v2 v3 v4 v5

v3

v1

v2

v3

v4

v5

v6

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

167 de 248

Manual de algortmica v3 v1 v2 v3 v4 v5 v6 v7

La ltima arista tomada es puente, pues no existe ninguna alternativa.

v3

v1

v2

v3

v4

v5

v6

v7

v4.

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

168 de 248

Manual de algortmica Encontrar una trayectoria euleriana en el siguiente grafo dirigido.

Vrtices Entrada Salida v1 2 2 1 1 v2 v3 1 1 v4 2 2 v5 2 1 v6 0 1 El grafo no es euleriano pues existen vrtices con grado de entrada y salida distintos, concretamente v5 y v6. En este caso podemos intentar encontrar dicha trayectoria partiendo de algunos de los vrtices anteriores.

Borrego Ropero Rafael Recio Domnguez Daniel

169 de 248

Manual de algortmica Los vrtices con grado de entrada distinto del grado de salida son v5 y v6. Comenzamos por el primer vrtice impar v5. v5 v4

v5

v4

v1

Borrego Ropero Rafael Recio Domnguez Daniel

170 de 248

Manual de algortmica

v5

v4

v1

v2

v5

v4

v1

v2

v3

Borrego Ropero Rafael Recio Domnguez Daniel

171 de 248

Manual de algortmica

v5

v4

v1

v2

v3

v4

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

172 de 248

Manual de algortmica

v5

v4

v1

v2

v3

v4

v2

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

173 de 248

Manual de algortmica v5 v4 v1 v2 v3 v4 v2 v5 .

La ltima arista tomada es puente, pues no existe ninguna alternativa.

En el siguiente paso nos damos cuenta que el vrtice v5 no posee ningn vrtice adyacente por lo que no se ha encontrado la trayectoria buscada pues no se han recorrido todas las aristas. En este caso lo nico que podemos hacer comenzar a construir la trayectoria desde el otro vrtice impar.

Borrego Ropero Rafael Recio Domnguez Daniel

174 de 248

Manual de algortmica Comenzamos por el primer vrtice impar v6. v6 v1

v6

v1

v2

Borrego Ropero Rafael Recio Domnguez Daniel

175 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

176 de 248

Manual de algortmica v6 v1 v2 v3

v6

v1

v2

v3

v4

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

177 de 248

Manual de algortmica

v6

v1

v2

v3

v4

v1

v6

v1

v2

v3

v4

v1

v5

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

178 de 248

Manual de algortmica

v6

v1

v2

v3

v4

v1

v5

v4

v6

v1

v2

v3

v4

v1

v5

v4

v2

Borrego Ropero Rafael Recio Domnguez Daniel

179 de 248

Manual de algortmica

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael Recio Domnguez Daniel

180 de 248

Manual de algortmica v6 v1 v2 v3 v4 v1 v5 v4 v2 v5.

En este caso partiendo desde el otro vrtice impar es posible encontrar la trayectoria euleriana abierta pero puede ocurrir que dicha trayectoria no exista.

Borrego Ropero Rafael Recio Domnguez Daniel

181 de 248

Manual de algortmica Veamos un ejemplo de grafo dirigido el que solo existen dos vrtices de grado impar pero no existe una trayectoria euleriana.

Vrtices Entrada Salida v1 0 2 v2 3 1 v3 1 1 v4 1 1 v5 1 1 En este caso no existe trayectoria euleriana pues es imposible visitar las aristas v1v2 y v1v5 si partimos del vrtice v2. Si por el contrario partiramos del vrtice v1 no podramos recorrer todas las que salen de dicho vrtice pues el grado de entrada es cero. Como conclusin podemos decir que en grafos dirigidos existe una trayectoria euleriana si el grado de entrada y salida de cada vrtice son iguales, en otro caso la trayectoria puede no existir. Seguidamente expondremos dos algoritmos encargados de buscar trayectorias eulerianas cerradas en cualquier tipo de grafos, pero con estrategias claramente distintas. Por ello en ambos se exige que los grafos cumplan ciertas restricciones. Si se trata de un grafo no dirigido todos los vrtices deben ser de grado par y si es no dirigido los grados de entrada y salida de cada vrtice deben ser idnticos para garantizar la existencia del ciclo euleriano. Teniendo claro lo anteriormente comentado pasaremos a explicar detalladamente las estrategias de ambos algoritmos.

Borrego Ropero Rafael Recio Domnguez Daniel

182 de 248

Manual de algortmica

Algoritmo de Tucker.

Tras comprobar las condiciones que permiten la ejecucin del algoritmo se siguen dos estrategias segn el tipo de grafo. Si el grafo es no dirigido para cada vrtice cuyo grado es mayor que dos se duplica hasta conseguir que reducir su grado a dos, en caso de ser un grafo dirigido duplicamos aquellos vrtices cuyo grado de entrada o salida sean distintos de uno hasta reducirlos a ese valor. Al final del proceso tenemos una lista de vrtices duplicados y los respectivos vrtices con los que se identifica. Adems cabe mencionar que el nmero de aristas del grafo original se conserva, lo nico que pueden aumentar es el nmero de vrtices. Una vez concluido el proceso de duplicacin el grafo queda dividido en un conjunto de componentes conexas a partir de las cuales iremos reconstruyendo los ciclos a la misma vez que identificamos los vrtices duplicados con el vrtice resultado de la duplicacin para dejar el grafo como estaba originalmente. Para terminar de comprender el algoritmo veremos un par de ejemplos.

Borrego Ropero Rafael Recio Domnguez Daniel

183 de 248

Manual de algortmica Aplicaremos el algoritmo de Tucker al siguiente grafo no dirigido.

Vrtices Grado v1 4 v2 4 v3 2 4 v4 v5 2 v6 2 v7 2 v8 2 2 v9 v10 2 v11 2 v12 2

Los vrtices cuyo grado es mayor que dos son v1, v2 y v4. Estos vrtices sern duplicados hasta conseguir reducir el grado a dos para cada uno de ellos.

Borrego Ropero Rafael Recio Domnguez Daniel

184 de 248

Manual de algortmica Duplicamos el vrtice v1 dando el vrtice v13.

Duplicamos el vrtice v2 dando el vrtice v14.

Borrego Ropero Rafael Recio Domnguez Daniel

185 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

186 de 248

Manual de algortmica Finalmente para que todos los vrtices posean grado 2 duplicamos el vrtice v4 dando el vrtice v15.

Tras el proceso de duplicacin el grafo queda dividido en un conjunto de componentes conexas concretamente cuatro y tenemos una lista de vrtices duplicados y el correspondiente vrtice con el que se identifica.

Vrtice duplicado Vrtice con el que se identifica v1 v13 v2 v14 v4 v15 Ahora reconstruiremos el grafo y la trayectoria euleriana cerrada identificando los vrtices duplicados. Si el grafo ha sido dividido en varias componentes conexas tomamos un vrtice de la lista de duplicados tal que el vrtice duplicado y el vrtice con el que se identifica estn en componentes conexas distintas comenzando por las primeras posiciones de la tabla anterior. Adems en ese caso en la primera iteracin reconstruiremos dos ciclos y los reensamblaremos por el final.

Borrego Ropero Rafael Recio Domnguez Daniel

187 de 248

Manual de algortmica Si el grafo solo posee una componente conexa reconstruir la trayectoria es trivial, viene determinada por el propio grafo, bastar identificar los vrtices duplicados y al mismo tiempo actualizarlos en la trayectoria. En este caso escogemos el vrtice duplicado v4 y el vrtice resultado de la duplicacin v15. Reconstruimos los dos ciclos identificando el vrtice. Primer ciclo {v4-v7-v8-v9-v4}. Segundo ciclo {v4-v3-v1-v2-v4}. Identificamos el vrtice y reensamblamos los ciclos.

Ciclo reensamblado {v4-v7-v8-v9-v4-v3-v1-v2-v4}. Como el grafo an no es conexo escogemos de la lista de vrtices duplicados uno que no haya sido considerado y cuyo vrtice duplicado pertenezca a la trayectoria parcialmente construida para que sea ms fcil la concatenacin del nuevo ciclo. Por lo que escogemos el vrtice duplicado v2 y el vrtice resultado de la duplicacin v14

Borrego Ropero Rafael Recio Domnguez Daniel

188 de 248

Manual de algortmica Reconstruimos el ciclo identificando el vrtice {v2-v5-v6-v2}

Borrego Ropero Rafael Recio Domnguez Daniel

189 de 248

Manual de algortmica Identificamos el vrtice.

Reensamblamos el nuevo ciclo en la trayectoria parcialmente construida por el final. {v4-v7-v8-v9-v4-v3-v1-v2-v5-v6-v2-v4}. Finalmente escogemos el vrtice duplicado v1 y el vrtice resultado de la duplicacin v13. Construimos el ciclo identificando el vrtice {v1-v10-v11-v12-v1} Por ltimo identificamos los vrtices y reensamblamos el ciclo por el final en la trayectoria euleriana parcialmente construida obteniendo la trayectoria cerrada completa.

Borrego Ropero Rafael Recio Domnguez Daniel

190 de 248

Manual de algortmica

Trayectoria euleriana cerrada {v4-v7-v8-v9-v4-v3-v1-v10-v11-v12-v1-v2-v4}.

Borrego Ropero Rafael Recio Domnguez Daniel

191 de 248

Manual de algortmica Veamos otro ejemplo

Vrtices Grado v1 4 v2 2 v3 2 4 v4 v5 2 v6 2

Los vrtices cuyo grado es mayor que dos son v1 y v4. Estos vrtices sern duplicados hasta conseguir reducir el grado a dos para cada uno de ellos.

Borrego Ropero Rafael Recio Domnguez Daniel

192 de 248

Manual de algortmica Duplicamos el vrtice v1 dando el vrtice v7.

Para terminar de conseguir que todos los vrtices tengan grado 2 duplicaremos el vrtice v4 dando el vrtice v8.

Vrtice duplicado Vrtice con el que se identifica v1 v7 v4 v8

Borrego Ropero Rafael Recio Domnguez Daniel

193 de 248

Manual de algortmica Como el grafo ha sido dividido 2 componentes conexas tomamos un vrtice de la lista de duplicados tal que el vrtice duplicado y el vrtice con el que se identifica estn en componentes conexas distintas comenzando por las primeras posiciones la tabla anterior. Adems en ese caso en la primera iteracin reconstruiremos dos ciclos y los reensamblaremos por el final. En este caso escogemos el vrtice duplicado v4 y el vrtice resultado de la duplicacin v8. Reconstruimos los dos ciclos identificando el vrtice. Primer ciclo {v4-v1-v2-v3-v4}. Segundo ciclo {v4-v5-v7-v6-v4}. Identificamos el vrtice y reensamblamos los ciclos.

Ciclo reensamblado {v4-v1-v2-v3-v4-v5-v7-v6-v4}. El grafo ya es conexo por lo que solo nos queda identificar el resto de vrtices si existen para obtener la trayectoria euleriana cerrada.

Borrego Ropero Rafael Recio Domnguez Daniel

194 de 248

Manual de algortmica Identificamos el ltimo vrtice duplicado que nos queda v1 con v7.

Identificamos el vrtice en la trayectoria {v4-v1-v2-v3-v4-v5-v1-v6-v4}.

Borrego Ropero Rafael Recio Domnguez Daniel

195 de 248

Manual de algortmica Finalmente detallaremos un ejemplo para un grafo dirigido.

Vrtices Entrada Salida v1 3 3 v2 1 1 1 1 v3 v4 1 1 v5 2 2 v6 1 1 v7 1 1 1 1 v8 v9 1 1 Como se trata de un grafo dirigido debemos conseguir que todos los vrtices tengan grado de entrada y salida igual a 1, por lo que duplicaremos los vrtices v1 y v5.

Borrego Ropero Rafael Recio Domnguez Daniel

196 de 248

Manual de algortmica Duplicamos el vrtice v1 dando el vrtice v10.

Duplicamos el vrtice v1 dando el vrtice v11.

Borrego Ropero Rafael Recio Domnguez Daniel

197 de 248

Manual de algortmica Duplicamos el vrtice v5 dando el vrtice v12.

Una vez que los grados de entrada y salida de todos los vrtices son iguales a 1 comenzamos el proceso reconstruccin de la trayectoria euleriana cerrada e identificacin de vrtices para dejar el grafo como estaba originalmente.

Vrtice duplicado Vrtice con el que se identifica v1 v10 v1 v11 v5 v12 Como es la primera iteracin reconstruiremos dos ciclos. Buscamos un vrtice duplicado y vrtice con el que se identifica de tal forma que pertenezcan a componentes conexas distintas. En este caso escogemos comenzando por las primeras posiciones de la tabla el vrtice duplicado v1 y el vrtice resultado de la duplicacin v1. Reconstruimos los dos ciclos identificando el vrtice. Primer ciclo {v1-v2-v3-v1}. Segundo ciclo {v1-v9-v1}.

Borrego Ropero Rafael Recio Domnguez Daniel

198 de 248

Manual de algortmica Identificamos el vrtice y reensamblamos los ciclos.

Ciclo reensamblado {v1-v2-v3-v1-v9-v1}. Como el grafo an no es conexo escogemos de la lista de vrtices duplicados uno que no haya sido considerado y cuyo vrtice duplicado pertenezca a la trayectoria parcialmente construida para que sea ms fcil la concatenacin del nuevo ciclo. Por lo que escogemos el vrtice duplicado v1 y el vrtice resultado de la duplicacin v11. Construimos el ciclo identificando el vrtice {v1-v4-v12-v6-v7-v5-v8-v1}. Identificamos el vrtice.

Borrego Ropero Rafael Recio Domnguez Daniel

199 de 248

Manual de algortmica

Reensamblamos los ciclos {v1-v2-v3-v1-v9-v1-v4-v12-v6-v7-v5-v8-v1}. Como el grafo ya es conexo tan solo nos falta identificar el resto de vrtices duplicados. Finalmente identificamos el vrtice duplicado v5 y el vrtice resultado de la duplicacin v12 y obtenemos la trayectoria euleriana cerrada.

Identificamos el vrtice en la trayectoria {v1-v2-v3-v1-v9-v1-v4-v5-v6-v7-v5-v8-v1}.

Borrego Ropero Rafael Recio Domnguez Daniel

200 de 248

Manual de algortmica

Algoritmo de Hierholzer.

Tras comprobar las condiciones que permiten la ejecucin del algoritmo, seguimos la siguiente estrategia independientemente del tipo de grafo. Nos situamos en un vrtice cualquiera y construimos un ciclo. Si todas las aristas del grafo han sido visitadas tenemos la trayectoria euleriana en otro caso partimos de un vrtice que forme parte de la trayectoria euleriana parcialmente construida y que an le queden adyacentes por considerar. Partiendo de este vrtice construimos otro ciclo y lo reensamblamos con el obtenido anteriormente comenzando por el principio de la lista que almacena la trayectoria euleriana. Para construir el ciclo basta coger en cada iteracin un adyacente del vrtice en el cual nos encontramos. El vrtice actual en cada iteracin es el adyacente obtenido. Dicho proceso se repetir hasta llegar al vrtice de partida. Este proceso se realiza hasta que todas las aritas del grafo hayan sido visitadas. Veamos algunos ejemplos para terminar de comprender el algoritmo.

Aplicar el algoritmo de Hierholzer al siguiente grafo no dirigido.

Borrego Ropero Rafael Recio Domnguez Daniel

201 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

202 de 248

Manual de algortmica El primer ciclo podemos construirlo partiendo de cualquier vrtice del grafo, por ejemplo v5. Obtenemos el ciclo {v5-v2-v1-v3-v4-v2-v6-v5}. A continuacin obtenemos otro ciclo partiendo de un vrtice perteneciente al ciclo anteriormente encontrado para que sea ms fcil la concatenacin de ambos. Partimos del vrtice v1 y obtenemos el ciclo {v1-v10-v11-v12-v1}. Ahora reensamblamos los ciclos: {v5-v2-v1-v10-v11-v12-v1-v3-v4-v2-v6-v5}. Como an no se han recorrido todas las aristas del grafo obtendremos otro ciclo partiendo de un vrtice contenido en los ciclos concatenados con anterioridad. Por lo que podemos partir del vrtice v4, obteniendo el ciclo {v4-v7-v8-v9-v4}. Ahora concatenamos los ciclos y obtenemos la trayectoria euleriana cerrada. {v5-v2-v1-v10-v11-v12-v1-v3-v4-v7-v8-v9-v4-v2-v6-v5}.

Borrego Ropero Rafael Recio Domnguez Daniel

203 de 248

Manual de algortmica Veamos un ejemplo para un grafo dirigido.

El primer ciclo podemos construirlo partiendo de cualquier vrtice del grafo, por ejemplo v3. Obtenemos el ciclo {v3-v1-v2-v3}. A continuacin obtenemos otro ciclo partiendo de un vrtice perteneciente al ciclo anteriormente encontrado para que sea ms fcil la concatenacin de ambos. Partimos del vrtice v1 y obtenemos el ciclo {v1-v4-v5-v6-v7-v5-v8-v1}. Ahora reensamblamos los ciclos: {v3-v1-v4-v5-v6-v7-v5-v8-v1-v2-v3}. Como an no se han recorrido todas las aristas del grafo obtendremos otro ciclo partiendo de un vrtice contenido en los ciclos concatenados con anterioridad. Por lo que podemos partir del vrtice v1, obteniendo el ciclo {v1-v9-v1}. Ahora concatenamos los ciclos y obtenemos la trayectoria euleriana cerrada. {v3-v1-v9-v1-v4-v5-v6-v7-v5-v8-v1-v2-v3}.

Borrego Ropero Rafael Recio Domnguez Daniel

204 de 248

Manual de algortmica

Problema del cartero

Este problema modeliza numerosas situaciones de la vida real como es la recogida de basura de una ciudad, repartos de mercancas, en definitiva situaciones donde se sale de punto y es necesario llegar o pasar por un conjunto de zonas y regresar a dicho punto minimizando el coste del trayecto. Tradicionalmente se conoce como problema del cartero debido al trabajo que esta persona realizan, puesto que un cartero debe salir de la oficina, repartir todas las cartas a todas las casas y volver a la oficina minimizando el coste del recorrido. El objetivo encontrar un recorrido cerrado de coste ptimo que pase por todas las aristas del grafo, pudiendo repetir las que sean necesarias. El algoritmo podemos dividirlo en cinco pasos bien diferenciados que detallaremos a continuacin.

PASO 1 Obtener los vrtices impares del grafo.

PASO 2 Formar el grafo completo kn con los vrtices impares. La ponderacin de las aristas del grafo anterior viene determinada por la distancia del camino mnimo en el grafo original entre cada par de vrtice del grafo completo formado por los vrtices impares. Para obtener el peso de las aristas se ha empleado el algoritmo de Dijkstra.

PASO 3 Buscar un emparejamiento perfecto de peso mnimo en el grafo completo formado por los vrtices impares.

PASO 4 Duplicar las aristas del camino mnimo anteriormente calculado segn el emparejamiento obtenido, es decir, si se obtuvo la siguiente pareja (v1, v2) se duplican las aristas del camino mnimo que une v1 con v2 en el grafo original.

Borrego Ropero Rafael Recio Domnguez Daniel

205 de 248

Manual de algortmica PASO 5 Encontrar el recorrido cerrado de menor coste. Para ello se ha utilizado el algoritmo de Fleury.

Seguidamente veremos un ejemplo en el que detallaremos cada uno de los pasos anteriormente comentados. Sea G el siguiente grafo.

Vrtices Grado v1 4 v2 4 v3 3 v4 4 v5 3 v6 1 v7 1 PASO 1

Los vrtices impares son v3, v5, v6 y v7.

Borrego Ropero Rafael Recio Domnguez Daniel

206 de 248

Manual de algortmica PASO 2

Construimos el grafo completo formado por los vrtices v3, v5, v6 y v7.

Ahora calcularemos las ponderaciones de las aristas. Para ello obtendremos la distancia del camino mnimo en G entre cada par de vrtices del grafo completo formado por los vrtices impares.

dG (v3, v5) = 2. dG (v3, v6) = 7. dG (v3, v7) = 2. dG (v5, v7) = 4. dG (v6, v5) = 6. dG (v6, v7) = 9.

Borrego Ropero Rafael Recio Domnguez Daniel

207 de 248

Manual de algortmica

Por lo que las ponderaciones de las aritas del grafo formado por los vrtices impares nos queda.

PASO 3

Buscamos un emparejamiento perfecto de peso mnimo en el grafo formado por los vrtices impares. Para ello se ha utilizado el algoritmo de emparejamiento de peso ptimo explicado en la seccin dedicada a los emparejamientos. El emparejamiento obtenido esta formado por las aristas v3v7 y v5v6. PASO 4

Ahora debemos duplicar en G las aristas del camino mnimo existente entre los vrtices emparejados para lo cual volvemos a aplicar Dijkstra.

Borrego Ropero Rafael Recio Domnguez Daniel

208 de 248

Manual de algortmica Obtenemos las aristas que forman parte del camino mnimo entre v3 y v7.

Obtenemos las aristas que forman parte del camino mnimo entre v5 y v6.

Borrego Ropero Rafael Recio Domnguez Daniel

209 de 248

Manual de algortmica

Las aristas coloreadas de azul se duplican en G. PASO 5

Finalmente encontramos el recorrido cerrado de coste mnimo aplicando el algoritmo de Fleury teniendo en cuenta las aristas duplicadas, es decir, podemos pasar por ellas dos veces. El recorrido es v6-v1-v2-v1-v4-v2-v4-v3-v7-v3-v4-v5-v2-v5-v1-v6. Orden en el que se recorren las aristas:

Arista (v6, v1, 2). Arista (v1, v2, 3). Arista (v2, v1, 3) Arista (v1, v4, 4). Arista (v4, v2, 6). Arista (v2, v4, 6). Arista (v4, v3, 1).

Borrego Ropero Rafael Recio Domnguez Daniel

210 de 248

Manual de algortmica

Arista (v3, v7, 2). Arista (v7, v3, 2). Arista (v3, v4, 1). Arista (v4, v5, 1). Arista (v5, v2, 1). Arista (v2, v5, 1). Arista (v5, v1, 5). Arista (v1, v6, 2).

El peso total del recorrido es 36 unidades.

Borrego Ropero Rafael Recio Domnguez Daniel

211 de 248

Manual de algortmica

3.10.- Algoritmos de vrtice coloracin


Se denomina vrtice coloracin de un grafo G(V,A) a una asignacin c: V /N que asocie a cada vrtice vi un color ci /N de tal forma que ha vrtices adyacentes les correspondan colores distintos. Dado un grafo G(V,A), siempre existe un valor umbral k para el cual G admite una vrtice coloracin con una paleta de k colores, pero no una de (k-1)-coloracin. Es decir k es el menor nmero de colores con los se puede obtener una vrtice coloracin de G. Este valor se conoce como nmero cromtico G. Determinar el nmero cromtico de un grafo es un problema complejo, no se conoce ningn algoritmo capaz de dar una solucin ptima en tiempo polinmico, por lo que ser necesario utilizar tcnicas algortmicas capaces de aproximar una solucin del problema en intervalos de tiempos polinomiales. Seguidamente expondremos cuatro algoritmos de coloracin de vrtices de carcter voraz y aplicaremos dichos algoritmos al siguiente grafo que tomaremos como ejemplo.

Borrego Ropero Rafael Recio Domnguez Daniel

212 de 248

Manual de algortmica

Algoritmo de coloracin Secuencial o Voraz.

Este algoritmo sigue una estrategia voraz, es decir comienza la coloracin de los vrtices segn orden de los stos en la matriz de adyacencias del grafo, por lo que la entrada del algoritmo es una ordenacin de los vrtices del grafo. La coloracin se realiza siguiendo los siguientes pasos. 1.- Asignar el color 1 al primer vrtice de la entrada del algoritmo. 2.- A continuacin escogemos el siguiente vrtice en la ordenacin y le asignamos el menor color posible diferente respecto a sus adyacentes. Repetimos este proceso hasta que todos los vrtices del grafo hayan sido coloreados. En cada paso se le asigna un color a un vrtice y no se le vuelve a modificar ms a lo largo de la ejecucin de ah el carcter voraz del algoritmo. Aplicaremos el algoritmo la grafo de la figura. Orden de coloracin: v1, v2, v3, v4, v5, v6, v7.

vrtices v1 v2 v3 v4 v5 v6 v7 color 1 2 1 3 1 2 2

Borrego Ropero Rafael Recio Domnguez Daniel

213 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

214 de 248

Manual de algortmica

Algoritmo de coloracin Welsh-Powell

La nica diferencia respecto al algoritmo voraz es el orden en el que se realiza la coloracin de vrtices. En este caso los vrtices se ordenan de mayor a menor grado, es decir en funcin del nmero de vrtices adyacentes.

A continuacin aplicaremos la coloracin de Welsh-Powell al grafo anterior.

Orden de coloracin: v2, v4, v5, v1, v3, v6, v7.

vrtices v1 v2 v3 v4 v5 v6 v7 color 3 1 2 2 3 1 1

Borrego Ropero Rafael Recio Domnguez Daniel

215 de 248

Manual de algortmica

Algoritmo de coloracin Matula-Marble-Isaacson

La nica diferencia respecto a los otros dos algoritmos de coloraciones el orden en el que se realiza la coloracin vrtices. En este caso el orden de los vrtices es inverso al proceso de seleccin. Primero se elige vn como el vrtice de menor grado, luego se elige vn-1 como el vrtice de menor grado en G-{vn} (prescindiendo del vrtice vn), y as se contina examinando los vrtices de menor grado y eliminndolos del grafo.

A continuacin aplicaremos la coloracin de Welsh-Powell al grafo anterior.

Orden de coloracin: v5, v4, v2, v1, v7, v3, v6.

vrtices v1 v2 v3 v4 v5 v6 v7 color 1 3 1 2 1 2 2

Borrego Ropero Rafael Recio Domnguez Daniel

216 de 248

Manual de algortmica

Algoritmo de coloracin de Brelaz

El orden de coloracin de los vrtices depende del grado g(V) y grado de saturacin o color de los vrtices gs(V) y es determinado en tiempo de ejecucin. El grado de un vrtice es nmero de adyacentes del mismo y el grado de saturacin es el nmero colores no repetidos usados en los adyacentes o vecinos. A continuacin expondremos los pasos del algoritmo:

PASO 1

Calcular el grado de todos los vrtices y colorear un vrtice de grado mximo con el color 1.

PASO 2

Seleccionamos un vrtice, an sin colorear, con grado de saturacin o color mximo. Si existen varios vrtices con el mismo grado de saturacin mximo escogemos el de mayor grado entre esos vrtices. Si adems coinciden en grado seleccionamos el primero comenzando por la izquierda de la tabla.

PASO 3

Colorear el vrtice seleccionado en el paso 2 con el menor color posible.

PASO 4

Si todos los vrtices se han coloreado, FIN. En caso contrario, volver al paso 3.

Borrego Ropero Rafael Recio Domnguez Daniel

217 de 248

Manual de algortmica A continuacin aplicaremos la coloracin de Brelaz al grafo anterior.

vrtices v1 v2 v3 v4 v5 v6 v7 grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 0 0 0 0 0 0 0 color - - - - - - orden - - - - - - -

La primera fila almacena el grado o el nmero de adyacentes de cada vrtice y la segunda fila contiene el grado de color o saturacin de cada vrtice que en principio es cero par todos los vrtices pues an no existe ningn vrtice coloreado. La ltima fila informa del color asignado al vrtice. El primer vrtice coloreado es el vrtice de grado mximo que en nuestro caso es v2 al cual se le asigna el color 1. Tras colorearlo el grado de saturacin sus vrtices adyacentes aumenta en una unidad.

v1 v2 v3 v4 v5 v6 v7 vrtices grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 1 0 1 1 1 0 0 color - 1 - - - - orden - 1 - - - - -

A continuacin habra que escoger un vrtice de grado de saturacin o color mximo pero existen varios por lo que seleccionamos el primer vrtice de grado mximo no colorado comenzando por la izquierda de la tabla. Dicho vrtice es v4 al cual se le asigna el menor color posible. En este caso el color 2.

vrtices v1 v2 v3 v4 v5 v6 v7 grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 2 0 1 1 2 0 0 color - 1 - 2 - - orden - 1 - 2 - - -

Borrego Ropero Rafael Recio Domnguez Daniel

218 de 248

Manual de algortmica En los siguientes pasos volvemos a seleccionar vrtice con grado de color mximo y si existiera ms de uno escogeramos el de mayor grado, hasta colorear todos los vrtices del grafo. Veamos la evolucin de la tabla.

vrtices v1 v2 v3 v4 v5 v6 v7 grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 2 0 1 1 2 0 1 color - 1 - 2 3 - orden - 1 - 2 3 - -

vrtices v1 v2 v3 v4 v5 v6 v7 grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 2 0 1 1 2 0 1 color 3 1 - 2 3 - orden 4 1 - 2 3 - -

v1 v2 v3 v4 v5 v6 v7 vrtices grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 2 0 1 1 2 1 1 color 3 1 3 2 3 - orden 4 1 5 2 3 - -

vrtices v1 v2 v3 v4 v5 v6 v7 grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 2 0 1 1 2 1 1 3 1 3 2 3 1 color orden 4 1 5 2 3 6 -

vrtices v1 v2 v3 v4 v5 v6 v7 grado g(V) 2 4 2 3 3 1 1 saturacin gs(V) 2 0 1 1 2 1 1 color 3 1 3 2 3 1 1 orden 4 1 5 2 3 6 7

Borrego Ropero Rafael Recio Domnguez Daniel

219 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

220 de 248

Manual de algortmica

Es bipartito?

Los grafos bipartitos kn,m, que son aquellos que admiten una particin de sus vrtices en dos conjuntos V = XY, de manera que las aristas tienen un extremo en cada uno de estos conjuntos (van de vrtices en X a vrtices en Y). El conjunto X e Y constan de n y m vrtices respectivamente. | X | = n. | Y | = m. Un grafo bipartito si y solo si no contiene ciclos de orden impar o su nmero cromtico X(G) es dos. Estas dos propiedades nos permiten saber si un grafo es bipartito. Teorema El algoritmo de Brelaz colorea con dos colores a los grafos bipartitos. Por lo que tenemos un algoritmo polinmico para decidir si un grafo es bipartito o no. Bastar aplicar la coloracin de Brelaz al grafo. Si el nmero de colores usados es igual a dos entonces el grafo es bipartito. En otro caso el grafo no es bipartito. Veamos el siguiente ejemplo.

Borrego Ropero Rafael Recio Domnguez Daniel

221 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

222 de 248

Manual de algortmica Aplicamos el algoritmo de Brelaz.

Como el nmero de colores utilizados es dos el grafo es bipartito. Veamos otro ejemplo

Borrego Ropero Rafael Recio Domnguez Daniel

223 de 248

Manual de algortmica Aplicamos el algoritmo de Brelaz.

Como el nmero de colores utilizados es distinto de dos el grafo no es bipartito.

Borrego Ropero Rafael Recio Domnguez Daniel

224 de 248

Manual de algortmica

3.11.- Algoritmos de aristas coloracin

Expondremos dos algoritmos para la coloracin de las aristas de un grafo, ambos de carcter voraz.

Algoritmo basado en rellenar un cuadrado latino


Un cuadrado latino es un matriz cuadrada cuya dimensin es n x n, donde n es el nmero de vrtices del grafo. Cada posicin de la matriz representa una arista entre dos vrtices. Para llevar acabo la coloracin rellenaremos la matriz con n smbolos de tal forma que no existan smbolos repetidos en ninguna fila o columna. Como curiosidad cabe mencionar que el algoritmo es parecido a la resolucin de sodokus salvo que en estos existen aristas previamente coloreadas y nosotros rellenaremos el cuadrado latino sin ninguna restriccin aadida. Para rellenar la tabla se comienza de izquierda a derecha y de arriba abajo asignado un color que no este ya en la fila y columna correspondiente a la arista tratada. Seguidamente veremos un ejemplo que aclarar todo lo expuesto anteriormente.

Borrego Ropero Rafael Recio Domnguez Daniel

225 de 248

Manual de algortmica

Rellenamos el cuadrado latino.

vrtices v1 v2 v3 v4 v5 v6 v7 v8 v9

v1 0 1 2 3 4 5

v2 1 0 3

v3 2 3 0 1

v4 0 2 1

v5 3 1 2 0 4

v6 1 4 0

v7 4 0 1

v8 5 1 0

v9 5 0

Lgicamente el cuadrado latino es simtrico pues las aristas vivj o vjvi son la misma para cualquier tipo de grafo en lo que a coloracin de arista se refiere, por ello tienen asignado el mismo color. Si una posicin del cuadrado latino aparece un infinito indica que no existe arista entre ambos vrtices.

Borrego Ropero Rafael Recio Domnguez Daniel

226 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

227 de 248

Manual de algortmica

Algoritmo basado en emparejamientos maximales

Este algoritmo colorea las aritas del grafo utilizando el algoritmo de emparejamiento maximal simple. Para ello comienza buscando un emparejamiento maximal en el grafo. Al conjunto de aristas obtenidas les asigna el color k. Seguidamente elimina dichas aristas del grafo y vuelve a calcular un emparejamiento maximal al cual le asigna el color k+1. Dicho proceso se repite hasta eliminar todas las aritas del grafo. Iniciar k := 1 Paso 1 Encontrar un emparejamiento mximo M de G, y colorear todas las aristas de M con el color k. Hacer G := G - M.

Paso 2 Si el grafo no posee aristas, FIN. En caso contrario hacer k := k+1 y volver al paso 1. A continuacin detallaremos un ejemplo para el siguiente grafo.

Borrego Ropero Rafael Recio Domnguez Daniel

228 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

229 de 248

Manual de algortmica Calculamos un emparejamiento maximal al cual le asignamos el color 1. Arista (v1, v2). Arista (v3, v5). Arista (v4, v6). Arista (v7, v8). Eliminamos del grafo las aristas del primer emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 2. Arista (v1, v7). Arista (v2, v3). Arista (v4, v5).

Borrego Ropero Rafael Recio Domnguez Daniel

230 de 248

Manual de algortmica Eliminamos del grafo las aristas del segundo emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 3. Arista (v1, v3). Arista (v5, v6).

Borrego Ropero Rafael Recio Domnguez Daniel

231 de 248

Manual de algortmica Eliminamos del grafo las aristas del tercer emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 4. Arista (v1, v5).

Borrego Ropero Rafael Recio Domnguez Daniel

232 de 248

Manual de algortmica Eliminamos del grafo la arista del cuarto emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 5. Arista (v5, v8).

Borrego Ropero Rafael Recio Domnguez Daniel

233 de 248

Manual de algortmica Eliminamos del grafo la arista del quinto emparejamiento.

Como no quedan aristas por colorear el algoritmo termina.

Borrego Ropero Rafael Recio Domnguez Daniel

234 de 248

Manual de algortmica

3.-12.- Hamilton
Un grafo conexo se dice hamiltoniano cuando admite un ciclo hamiltoniano. Un ciclo hamiltoniano es un ciclo que pasa por todos los vrtices del grafo. Un camino hamiltoniano es un camino simple que pasa por todos los vrtices del grafo sin repetir ninguno.

Algoritmo de Dirac.

El problema de decidir si un grafo es hamiltoniano est abierto (no existe un procedimiento para saber si lo es).

Teorema de Dirac.

Borrego Ropero Rafael Recio Domnguez Daniel

235 de 248

Manual de algortmica Un grafo G (V, A) es hamiltoniano si todos los vrtices tienen valencia (V) n/2 donde n es el nmero de vrtices del grafo. Esta condicin es suficiente pero no necesaria por lo que si el grafo no satisface dicha relacin no podemos asegurar que no sea hamiltoniano.

Borrego Ropero Rafael Recio Domnguez Daniel

236 de 248

Manual de algortmica Ejemplo 1.

Vrtices v1 v2 v3 v4 v5 v6

(V) n/2 5 6/2 = 3 3 6/2 = 3 4 6/2 = 3 4 6/2 = 3 3 6/2 = 3 3 6/2 = 3

El grafo es hamiltoniano pues todos los vrtices tienen valencia mayor o igual que 3.

Borrego Ropero Rafael Recio Domnguez Daniel

237 de 248

Manual de algortmica Ejemplo 2.

Vrtices v1 v2 v3 v4 v5 v6 v7 v8

(V) n/2 6 8/2 = 4 3 8/2 = 4 4 8/2 = 4 4 8/2 = 4 3 8/2 = 4 4 8/2 = 4 2 8/2 = 4 2 8/2 = 4

Como existen vrtices que no cumplen la relacin, no podemos asegurar que el grafo no sea hamiltoniano.

Borrego Ropero Rafael Recio Domnguez Daniel

238 de 248

Manual de algortmica

Bsqueda de trayectorias hamiltonianas.

El problema de bsqueda de trayectorias hamiltonianas es un problema NP-completo. Aunque existen mtodos aproximados se ha optado por un algoritmo de bsqueda exhaustiva, implementado mediante la tcnica de backtracing. El esquema que implementa el backtracing:
proc btptimo(x: Etapa) var xsig: Etapa cand: Candidatos prin si (esSolucin(x)) si (esMejor()) actualizaSolucin() fsi fsi xsig := nuevaEtapa(x) cand := calculaCandidatos(x) mientras (quedanCandidatos(cand)) seleccionaCandidato(cand, xsig); si (esPrometedor(cand, xsig)) anotaSolucin(cand, xsig); btOptimo(xsig); cancelaAnotacin(cand, xsig); fsi fmientras fin

A continuacin comentaremos algunas caractersticas del problema que se pretende resolver y detallaremos cada uno de los mtodos y clases que hacen posible la bsqueda de la trayectoria hamiltoniana. Comenzaremos por la Clase Solucin Clase Solucin // Atributos solucin : Array de enteros. fclase

Borrego Ropero Rafael Recio Domnguez Daniel

239 de 248

Manual de algortmica La solucin se almacena en un array de enteros donde que almacena la posicin del vrtice respecto a la matriz de adyacencias del grafo. El tamao del array y la profundidad a la que se encuentra la solucin en caso de existir vienen determinados por el nmero de vrtices del grafo. Podemos decir que si existe la solucin se encuentra a dicha profundidad en el rbol de expansin, en otro caso no existe solucin. Una vez que se encuentra una solucin el se para el proceso de bsqueda y reconstruiremos la trayectoria a partir de las posiciones del los vrtices en la matriz de adyacencias. Adems al no tratarse de un problema de optimizacin el mtodo esMejor retorna siempre cierto. y actualiza solucin se deja vaco.

Clase Candidatos Clase Candidatos // Atributos vrticesDestinos: Array de enteros i: entero fclase

El array almacena las posiciones de los posibles vrtices destinos respecto a la matriz de adyacencias del grafo del ltimo vrtice que forma parte de la trayectoria hamiltoniana que no hayan sido ya considerados por lo que todos los candidatos son prometedores, por ello el mtodo esPrometedor siempre retornar cierto. En la primera etapa Los candidatos se obtienen en el mtodo calculaCandidatos. El entero i se utiliza para iterar y seleccionar el vrtice candidato, operacin realizada en el mtodo seleccionaCandidato.

Borrego Ropero Rafael Recio Domnguez Daniel

240 de 248

Manual de algortmica Clase Etapa Clase Etapa // Atributos k: entero fclase

El entero almacena la profundidad del rbol de expansin. Ahora detallaremos los atributos de la clase que da cuerpo a cada uno de los mtodos del esquema.

Clase HamiltoBacktracing

Clase HamiltoBacktracing // Matriz de adyacencias del grafo. adyacencias: Array [][] de real hamiltoniano: Array de entero // Tipo de trayectoria bsqueda (ciclo o camino) ciclo: Lgico // Nmero de vrtices del grafo. numVrtices: entero. vrticeActual: entero // Si su valor es cierto se ha encontrado la solucin. solEncontrada: Lgico // Almacenar la trayectoria si se encuentra. sol: Solucin fclase

El array hamiltoniano almacena la secuencia de posiciones de los vrtices que forman parte de la trayectoria respecto a la matriz de adyacencias del grafo y el entero vrticeActual almacena la posicin del ltimo vrtice que forma parte de la trayectoria. El tipo de trayectoria buscada es elegida por el usuario.

Borrego Ropero Rafael Recio Domnguez Daniel

241 de 248

Manual de algortmica

Finalmente comentar que en el mtodo anotaEnSolucin se aade el vrtice candidato a la trayectoria parcialmente construida y en cancelaAnotacin solo decrementamos el valor de la etapa. Para aclara todo lo expuesto anteriormente realizaremos una serie ejemplo. Consideremos el siguiente grafo en el cual encontrar el ciclo o camino hamiltoniano es trivial pero nos servir para mostrar el rbol de expansin completo. En el rbol en vez de mostraremos los vrtices y no las posiciones que estos ocupan en la matriz de adyacencias.

En este caso el array que almacena la solucin posee tamao 3 y a dicha profundidad obtendremos la solucin, pero seguiremos expandiendo el rbol para ver como evoluciona aunque no es necesario y de hecho no se realiza en la implementacin proporcionada para la aplicacin pues seria una perdida de tiempo. Al lado de cada tupla entre llaves aparecen lo candidatos.

Etapa k= 0

[-, -, -] {v1, v2, v3}

[v1, -, -] {v2, v3} k=1 [v1, v2, -] [v1, v3, -]

[v2, -, -] {v1, v3}

[v3, -, -] {v1, v2}

[v2, v1, -]

[v2, v3, -]

[v3, v1, -]

[v3, v2, -]

Borrego Ropero Rafael Recio Domnguez Daniel

242 de 248

Manual de algortmica k=2 {v3} {v2} {v3} {v1} [v2, v3, v1] {v2} [v3, v1, v2] {v1} [v3, v2, v1]

[v1, v2, v3]

[v1, v3, v2] [v2, v1, v3]

Borrego Ropero Rafael Recio Domnguez Daniel

243 de 248

Manual de algortmica La solucin encontrada es v1-v2-v3 si se desea el camino o v1-v2-v3 -v1 en el caso del ciclo, el resto del rbol no seria necesario generarlo. En cada tupla se actualiza la posicin correspondiente con la etapa en la que nos encontramos considerando que las posiciones del array comienzan en cero. A continuacin expondremos otro ejemplo con su rbol de expansin para un grafo en el que existe un camino hamiltoniano. Una vez encontrado el camino no seguiremos expandiendo el rbol.

Etapa [-, -, -, -] {v1, v2, v3, v4} k=0

[v1, -, -, -,] k=1

{v2, v3, v4}

[v2, -, -, -] {v1}

[v1, v2, -, -] {} k=2

[v1, v3, -, -] {v4}

[v1, v4, -, -] {v3}

[v2, v1, -, -] {v3, v4}

[v1, v3, v4, -] {} k=3

[v1, v4, v3, -] {}

[v2, v1, v3, -] {v4}

[v2, v1, v3, v4]

Borrego Ropero Rafael Recio Domnguez Daniel

244 de 248

Manual de algortmica El camino hamiltoniano es v2-v1-v3-v4.

Borrego Ropero Rafael Recio Domnguez Daniel

245 de 248

Manual de algortmica Finalmente podremos un ejemplo de bsqueda de un ciclo hamiltoniano en el que solo mostraremos la solucin.

El ciclo hamiltoniano es v3-v5-v1.v2.v4-v6-v3.

Borrego Ropero Rafael Recio Domnguez Daniel

246 de 248

Manual de algortmica

Borrego Ropero Rafael Recio Domnguez Daniel

247 de 248

Manual de algortmica

4.- Bibliografa
Apuntes de la asignatura de matemtica discreta de la escuela tcnica superior de informtica de la universidad de Sevilla http://ma1.eii.us.es/miembros/mcruz/MD/md_ii.html. Apuntes de la asignatura de teora de grafos de la escuela tcnica superior de informtica de la universidad de Sevilla http://ma1.eii.us.es/Docencia/Doc_info/XSLT.asp?xml=teorgraf.xml&xsl=progra ma.xsl&par=esp:. Coloracin de vrtices y aristas http://www.dma.fi.upm.es/grafos/color03.pdf. Apuntes sobre grafos eulerianos http://www.google.es/search?hl=es&q=grafos+German+Combariza&btnG=B% C3%BAsqueda&meta=. Conectividad en grafos http://mipagina.cantv.net/jhnieto/md/Grafos.pdf.

Borrego Ropero Rafael Recio Domnguez Daniel

248 de 248

También podría gustarte