Vous êtes sur la page 1sur 14

GRAFOS

Tabla de contenido

I. II. III. IV. V. VI.

Introduccin. Objetivo. Marco terico Grafos Aplicacin. Conclusin. Bibliografa.

OBJETIVO

Objetivo General Identificar el funcionamiento de los grafos.

Definiciones de los grafo y conceptos relacionados

Objetivo Especifico

Manejo de los grafos a travs de algoritmos. Diferentes variantes de los problemas de encontrar el camino mas
fcil sobre un grafo

Marco terico

Grafos
Un grafo es un objeto matemtico que se utiliza para representar circuitos, redes, etc. Los grafos son muy utilizados en computacin, ya que permiten resolver problemas muy complejos Un grafo consta de vrtices (o nodos) y aristas. Los vrtices son objetos que contienen informacin y las aristas son conexiones entre vrtices. Para representarlos, se suelen utilizar puntos para los vrtices y lneas para las conexiones, aunque hay que recordar siempre que la definicin de un grafo no depende de su representacin. Un camino entre dos vrtices es una lista de vrtices en la que dos elementos sucesivos estn conectados por una arista del grafo. El grafo ser conexo si existe un camino desde cualquier nodo del grafo hasta cualquier otro. Si no es conexo constar de varias componentes conexas. Un camino simple es un camino desde un nodo a otro en el que ningn nodo se repite (no se pasa dos veces). Si el camino simple tiene como primer y ltimo elemento al mismo nodo se denomina ciclo. Cuando el grafo no tiene ciclos tenemos un rbol (ver rboles). Varios rboles independientes forman un bosque. Un rbol de expansin de un grafo es una reduccin del grafo en el que solo entran a formar parte el nmero mnimo de aristas que forman un rbol y conectan a todos los nodos. Segn el nmero de aristas que contiene, un grafo es completo si cuenta con todas las aristas posibles (es decir, todos los nodos estn conectados con todos), disperso si tiene relativamente pocas aristas y denso si le faltan pocas para ser completo. Las aristas son la mayor parte de las veces bidireccionales, es decir, si una arista conecta dos nodos A y B se puede recorrer tanto en sentido hacia B como en sentido hacia A: estos son llamados grafos no dirigidos. Sin embargo, en ocasiones tenemos que las uniones son unidireccionales. Estas uniones se suelen dibujar con una flecha y definen un grafo dirigido. Cuando las aristas llevan un coste asociado (un entero al que se denomina peso) el grafo es ponderado. Una red es un grafo dirigido y ponderado. Una caracterstica especial en los grafos es que podemos representarlos utilizando dos estructuras de datos distintas. En los algoritmos que se aplican sobre ellos veremos que adoptarn tiempos distintos dependiendo de la forma de representacin elegida. En particular, los tiempos de ejecucin variarn en funcin del nmero de vrtices y el de aristas, por lo que la utilizacin de una

representacin u otra depender en gran medida de si el grafo es denso o disperso. Para nombrar los nodos utilizaremos letras maysculas, aunque en el cdigo deberemos hacer corresponder cada nodo con un entero entre 1 y V (nmero de vrtices) de cara a la manipulacin de los mismos.

Exploracin de grafos Al intervalo de explorar un grafo, nos encontramos con dos mtodos distintos. Ambos conducen al mismo destino (la exploracin de todos los vrtices o hasta que se encuentra uno determinado), si bien el orden en que stos son "visitados" decide radicalmente el tiempo de ejecucin de un algoritmo, como se ver posteriormente. En primer lugar, una forma sencilla de recorrer los vrtices es mediante una funcin recursiva, lo que se denomina bsqueda en profundidad. La sustitucin de la recursin (cuya base es la estructura de datos pila) por una cola nos proporciona el segundo mtodo de bsqueda o recorrido, la bsqueda en amplitud o anchura.

Suponiendo que el orden en que estn almacenados los nodos en la estructura de datos correspondiente es A-B-C-D-E-F... (el orden alfabtico), tenemos que el orden que seguira el recorrido en profundidad sera el siguiente: A-B-E-I-F-C-G-J-K-H-D

En un recorrido en anchura el orden sera, por contra: A-B-C-D-E-G-H-I-J-K-F Es decir, en el primer caso se exploran primero los verdes y luego los marrones, pasando primero por los de mayor intensidad de color. En el segundo caso se exploran primero los verdes, despus los rojos, los naranjas y, por ltimo, el rosa. Es destacable que el nodo D es el ltimo en explorarse en la bsqueda en profundidad pese a ser adyacente al nodo de origen (el A). Esto es debido a que primero se explora la rama del nodo C, que tambin conduce al nodo D. En estos ejemplos hay que tener en cuenta que es fundamental el orden en que los nodos estn almacenados en las estructuras de datos. Si, por ejemplo, el nodo D estuviera antes que el C, en la bsqueda en profundidad se tomara primero la rama del D (con lo que el ltimo en visitarse sera el C), y en la bsqueda en anchura se explorara antes el H que el G.

Representacin por lista de adyacencia


Otra forma de representar un grafo es por medio de listas que definen las aristas que conectan los nodos. Lo que se hace es definir una lista enlazada para cada nodo, que contendr los nodos a los cuales es posible acceder. Es decir, un nodo A tendr una lista enlazada asociada en la que aparecer un elemento con una referencia al nodo B si A y B tienen una arista que los une. Obviamente, si el grafo es no dirigido, en la lista enlazada de B aparecer la correspondiente referencia al nodo A. Las listas de adyacencia sern estructuras que contendrn un valor entero (el nmero que identifica al nodo destino), as como otro entero que indica el coste en el caso de que el grafo sea ponderado. En el ejemplo se ha utilizado un nodo z ficticio en la cola (ver listas, apartado cabeceras y centinelas). struct nodo { int v; int p; nodo *sig; }; int V,A; // vrtices y aristas del grafo struct nodo *a[maxV], *z; void inicializar() {

int i,x,y,peso; char v1,v2; struct nodo *t; z=(struct nodo *)malloc(sizeof(struct nodo)); z->sig=z; for (i=0; i<V; i++) a[i]=z; for (i=0; i<A; i++) { scanf("%c %c %d\n",&v1,&v2,&peso); x=v1-'A'; y=v2-'A'; t=(struct nodo *)malloc(sizeof(struct nodo)); t->v=y; t->p=peso; t->sig=a[x]; a[x]=t; t=(struct nodo *)malloc(sizeof(struct nodo)); t->v=x; t->p=peso; t->sig=a[y]; a[y]=t; } } En este caso el espacio ocupado es O(V + A), muy distinto del necesario en la matriz de adyacencia, que era de O(V2). La representacin por listas de adyacencia, por tanto, ser ms adecuada para grafos dispersos. Hay que tener en cuenta un aspecto importante y es que la implementacin con listas enlazadas determina fuertemente el tratamiento del grafo posterior. Como se puede ver en el cdigo, los nodos se van aadiendo a las listas segn se leen las aristas, por lo que nos encontramos que un mismo grafo con un orden distinto de las aristas en la entrada producir listas de adyacencia diferentes y por ello el orden en que los nodos se procesen variar. Una consecuencia de esto es que si un problema tiene varias soluciones la primera que se encuentre depender de la entrada dada. Podra presentarse el caso de tener varias soluciones y tener que mostrarlas siguiendo un determinado orden. Ante una situacin as podra ser muy conveniente modificar la forma de meter los nodos en la lista (por ejemplo, hacerlo al final y no al principio, o incluso insertarlo en una posicin adecuada), de manera que el algoritmo mismo diera las soluciones ya ordenadas. Gracias a la teora de Grafos se pueden resolver diversos problemas como por ejemplo la sntesis de circuitos secuenciales, contadores o sistemas de apertura. Los grafos se utilizan los mismos tambin para modelar trayectos como el de una lnea de autobs a travs de las calles de una ciudad, en el que podemos obtener caminos ptimos para el trayecto aplicando diversos algoritmos como puede ser el algoritmo de Floyd. Para la administracin de proyectos, utilizamos tcnicas como PERT en las que se modelan los mismos utilizando grafos y optimizando los tiempos para concretar

Aplicaciones:
Puentes de Konigsberg: Uno de los primeros problemas que fueron
modelados usando grafos fue el que confront Leonard Euler (1736). En la ciudad de Kaliningrado (antigua Knigsberg) haba siete puentes sobre el ro Pregel. Uno de los puentes conectaba dos islas entre s. Una de las islas estaba conectada a una ribera por dos puentes y otros dos puentes la conectaban con la otra costa. La otra isla posea un puente hacia cada ribera. Euler se pregunt si sera posible comenzar un paseo desde cualquier punto y atravesar cada puente una y slo una vez, regresando al punto departida .

Teorema de los 4 colores: En 1852 Francis Guthrie plante el problema de


los 4 colores, resuelto hasta un siglo despus por Kenneth Appel y Wolfgang Haken .El teorema de cuatro colores establece que cualquier mapa geogrfico puede ser coloreado con cuatro colores diferentes, de forma que no queden regiones adyacentes con el mismo color. Dos regiones se dicen adyacentes si comparten un segmento de borde en comn, no solamente un punto. La forma precisa de cada pas no importa; lo nico relevante es saber qu pas toca a qu otro. Estos datos estn incluidos en el grafo donde los vrtices son los pases y las aristas conectan los que justamente son adyacentes. Entonces la cuestin equivale a atribuir a cada vrtice un color distinto del de sus vecinos. Si se empieza por el pas central a y se esfuerza uno en utilizar el menor nmero de colores, entonces en la corona alrededor de a alternan dos colores. Llegando al pas h se tiene que introducir un cuarto color. Lo mismo sucede en i si se emplea el mismo mtodo.

En la red de internet: Se puede representar mediante un grafo dirigido en que cada pagina Web esta representada por un vrtice y en el que una arista comienza en la pagina a y termina en la pagina b. Como cada segundo se crean pginas Web nuevas y otras desaparecen, hay ms de millones de vrtices y decenas de miles de aristas

Hay por lo menos dos maneras evidentes de representar un grafo en un computador, utilizando la notacin pseudo formal propuesta en . La primera utiliza lo que se conoce como una matriz de adyacencia, a saber: CLASE Grafo Privado: Arreglo de <Tipo> Nodos de [1..N]; Arreglo de logico MatrizDeAdyacencia de [1..N][1..N]; Publico: # Todas las operaciones aqu FCLASE Un valor verdadero en la posicin (i,j) de la matriz indica que hay una arista que Conecta al nodo i con el nodo j. Para representar un grafo pesado se puede cambiar la matriz de adyacencia de lgicos a una matriz de registros, siendo el peso un campo del registro. Esta representacin es muy til cuando se cumplen dos condiciones principales. Primero, si se conoce el nmero exacto de nodos en el grafo no hace falta utilizar estructuras dinmicas porque las estticas se pueden acceder con mayor facilidad. Segundo, la matriz de adyacencia no contiene un gran nmero de elementos en FALSO. 5 Si no se cumple la primera de estas condiciones y el nmero de nodos en el grafo puede variar drsticamente entonces se justifica el uso de estructuras dinmicas. En este caso, lo ideal es utilizar una lista lineal de nodos conteniendo la informacin en <Tipo>.

Por supuesto, si el nmero de nodos va a cambiar entonces tampoco se justificas tener un matriz estticas, por lo que debera utilizarse una matriz esparcida. CLASE Nodo #Nodo de la lista de <Tipo> Publico: entero Id; <Tipo> Info; -Nodo proximo; #Operaciones aqu FCLASE #La declaracin de los nodos para las columnas (NodoC), filas (NodoF) y #nodos internos de la matriz van aqu. Son las declaraciones de una #matriz esparcida implementada con listas con posicin lgica fija o #relativa. CLASE Grafo Privado: -Nodo primerNodo; # 1er. nodo de la lista -NodoF primeraFila; # 1era. fila de la matriz esparcida -NodoC primeraColumna; # 1era. columna de la matriz esparcida Publico: # Todas las operaciones aqu FCLASE Sin embargo, puede que esta solucin no sea la ms conveniente por el hecho de que la matriz esparcida ocupar ms memoria que su contraparte esttica a medida que el nmero de conexiones entre los nodos sea mayor, ya que habr pocos elementos no nulos dentro de la matriz. En ese caso, se debe utilizar otra implementacin. CLASE Nodo #Nodo de la lista de <Tipo> Publico: entero Id; <Tipo> Info; -Nodo proximo; -Ady ListaDeAdyacentes; #Operaciones aqu FCLASE CLASE Ady #Nodo de la lista de nodos adyacentes Publico: -Nodo AdyAeste; -Ady proximo; #Operaciones aqu FCLASE CLASE Grafo Privado: -Nodo primerNodo; # 1er. nodo de la lista Publico: 6 # Todas las operaciones aqu

FCLASE Esta representacin ocupa menos memoria que la anterior sin importar si la matriz esparcida esta muy llena o no, pero puede incrementar la complejidad de algunas operaciones, como por ejemplo saber cuales nodos son adyacentes a un nodo en particular (en caso de un grafo dirigido). De nuevo, si las aristas tambin tienen algn tipo de informacin asociada bastara una leve modificacin en la clase Ady estructura para agregarla. Por supuesto, se deben implementar las operaciones ms comunes como agregar un nodo al grafo, eliminar un nodo del grafo y conectar un nodo con otro. En adicin, se puede implementar todo tipo de operaciones basadas en la teora de grafos

Listas de adyacencia.
o Para cada nodo de V tendremos una lista de aristas que parten de ese nodo. Estas listas se guardan en un array de nodos cabecera. o Si el grafo esta etiquetado, se aade un nuevo campo a los elementos de la lista. o Si el grafo es no dirigido, entonces cada arista (v,w) se representar dos veces, en la lista de v y en la de w. o til para grafos esparcidos (|A| |V|2)

rboles de expansin: Algoritmo de Prim


Un rbol de expansin de un grafo no dirigido G=(V,A) y conexo, es un subgrafo G=(V,A) no dirigido, conexo y sin ciclos. Importante: contiene todos los vrtices de G. El algoritmo de Prim intenta encontrar un rbol de expansin de un grafo, cuyas aristas sumen el peso mnimo.

Mtodo de paralelizacin.
Supongamos p procesos y n vertices. El conjunto V se divide en p subconjuntos usando el mapping de bloques de 1 dimensin. Cada subconjunto tiene n/p vertices consecutivos, y el trabajo de cada subconjunto se asigna a procesos diferentes. Cada proceso Pi almacena la parte del array d que corresponde a Vi.

Al paralelizar el algoritmo de Prim se logra un tiempo de ejecucin de:

Tsequencial = (n2) Tparalelo = (n2 / p) + (n log p) ejecucin comunicacin

Conclusin
Se concluyo que la Teora de Grafos sirve como un modelo matemtico para estructuras en cualquier campo. Pero una de su ms importante rea de aplicacin es la ciencia de la computacin. Estos modelos son aplicados especialmente en lenguajes de computacin, circuitos, redes e interconexin de redes para procesadores paralelos entre otros.

Bibliografa

1. http://www.geocities.com/Athens/Acropolis/4329/puentes.htm 2. http://www.analytictech.com/networks/Teoriadegrafos.pdf 3. http://centros5.pntic.mec.es/ies.ortega.y.rubio/Mathis/Colores/4colores.htm

Vous aimerez peut-être aussi