viernes, 10 de junio de 2011

Grafos

Grafos
En matemáticas y en ciencias de la computación, la teoría de grafos (también llamada teoría de las gráficas) estudia las propiedades de los grafos (también llamadas gráficas). Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección de pares de vértices, llamados aristas (edges en inglés) que pueden ser orientados o no. Típicamente, un grafo se representa mediante una serie de puntos (los vértices) conectados por líneas (las aristas).

Existen diferentes formas de almacenar grafos en una computadora. La estructura de datos usada depende de las características del grafo y el algoritmo usado para manipularlo. Entre las estructuras más sencillas y usadas se encuentran las listas y las matrices, aunque frecuentemente se usa una combinación de ambas. Las listas son preferidas en grafos dispersos porque tienen un eficiente uso de la memoria. Por otro lado, las matrices proveen acceso rápido, pero pueden consumir grandes cantidades de memoria.

Estructura de lista

  • lista de incidencia - Las aristas son representadas con un vector de pares (ordenados, si el grafo es dirigido), donde cada par representa una de las aristas.1
  • lista de adyacencia - Cada vértice tiene una lista de vértices los cuales son adyacentes a él. Esto causa redundancia en un grafo no dirigido (ya que A existe en la lista de adyacencia de B y viceversa), pero las búsquedas son más rápidas, al costo de almacenamiento extra.
En esta estructura de datos la idea es asociar a cada vértice i del grafo una lista que contenga todos aquellos vértices j que sean adyacentes a él. De esta forma sólo reservará memoria para los arcos adyacentes a i y no para todos los posibles arcos que pudieran tener como origen i. El grafo, por tanto, se representa por medio de un vector de n componentes (si |V|=n) donde cada componente va a ser una lista de adyacencia correspondiente a cada uno de los vértices del grafo. Cada elemento de la lista consta de un campo indicando el vértice adyacente. En caso de que el grafo sea etiquetado, habrá que añadir un segundo campo para mostrar el valor de la etiqueta.


Estructuras matriciales                                                                                                              

  • Matriz de incidencia - El grafo está representado por una matriz de A (aristas) por V (vértices), donde [arista, vértice] contiene la información de la arista (1 - conectado, 0 - no conectado)
  • Matriz de adyacencia - El grafo está representado por una matriz cuadrada M de tamaño n2, donde n es el número de vértices. Si hay una arista entre un vértice x y un vértice y, entonces el elemento mx,y es 1, de lo contrario, es 0.

Definiciones

Vertice

Los vértices constituyen uno de los dos elementos que forman un grafo. Como ocurre con el resto de las ramas de las matemáticas, a la Teoría de Grafos no le interesa saber qué son los vértices.
Diferentes situaciones en las que pueden identificarse objetos y relaciones que satisfagan la definición de grafo pueden verse como grafos y así aplicar la Teoría de Grafos en ellos.


Grafo

Un grafo es una pareja de conjuntos G = (V,A), donde V es el conjunto de vértices, y A es el conjunto de aristas, este último es un conjunto de pares de la forma(u,v) tal que u,v \in V, tal que u \neq v. Para simplificar, notaremos la arista (a,b) como ab.
En teoría de grafos, sólo queda lo esencial del dibujo: la forma de las aristas no son relevantes, sólo importa a qué vértices están unidas. La posición de los vértices tampoco importa, y se puede variar para obtener un dibujo más claro.
Muchas redes de uso cotidiano pueden ser modeladas con un grafo: una red de carreteras que conecta ciudades, una red eléctrica o la red de drenaje de una ciudad.


Subgrafo

Un subgrafo de un grafo G es un grafo cuyos conjuntos de vértices y aristas son subconjuntos de los de G. Se dice que un grafo G contiene a otro grafo H si algún subgrafo de G es H o es isomorfo a H(dependiendo de las necesidades de la situación).
El subgrafo inducido de G es un subgrafo G' de G tal que contiene todas las aristas adyacentes al subconjunto de vértices de G.
Definición:
Sea G=(V, A). G’=(V’,A’) se dice subgrafo de G si:
1- V’ \subseteq V
2- A' \subseteq A
3- (V’,A’) es un grafo
  • Si G’=(V’,A’) es subgrafo de G, para todo v \in G se cumple gr (G’,v)≤ gr (G, v)
G2 es un subgrafo de G.
Grafos1.jpg

Aristas dirigidas y no dirigidas.

Grafo ejemplo 2.png
En algunos casos es necesario asignar un sentido a las aristas, por ejemplo, si se quiere representar la red de las calles de una ciudad con sus direcciones únicas. El conjunto de aristas será ahora un subconjunto de todos los posibles pares ordenados de vértices, con (a, b) ≠ (b, a). Los grafos que contienen aristas dirigidas se denominan grafos orientados, como el siguiente:
Las aristas no orientadas se consideran bidireccionales para efectos prácticos (equivale a decir que existen dos aristas orientadas entre los nodos, cada una en un sentido).
En el grafo anterior se ha utilizado una arista que tiene sus dos extremos idénticos: es un lazo (o bucle), y aparece también una arista bidireccional, y corresponde a dos aristas orientadas.
Aquí V = { a, b, c, d, e }, y A = { (a, c), (d, a), (d, e), (a, e), (b, e), (c, a)(c, c), (d, b) }.
Se considera la característica de "grado" (positivo o negativo) de un vértice v (y se indica como (v)), como la cantidad de aristas que llegan o salen de él; para el caso de grafos no orientados, el grado de un vértice es simplemente la cantidad de aristas incidentes a este vértice. Por ejemplo, el grado positivo (salidas) de d es 3, mientras que el grado negativo (llegadas) de d es 0.
Según la terminología seguida en algunos problemas clásicos de Investigación Operativa (p.ej.: el Problema del flujo máximo), a un vértice del que sólo salen aristas se le denomina fuente (en el ejemplo anterior, el vértice d); tiene grado negativo 0. Por el contrario, a aquellos en los que sólo entran aristas se les denomina pozo o sumidero (en el caso anterior, el vértice e); tiene grado positivo 0. A continuación se presentan las implementaciones en maude de grafos no dirigidos y de grafos dirigidos.En los dos casos, las especificaciones incluyen, además de las operaciones generadoras, otras operaciones auxiliares.
No es fácil representar apropiadamente un grafo. De hecho no es fácil representar bien prácticamente cualquier cosa que tenga utilidad. Sin embargo el estudio de las grandes posibilidades que ofrece la representación automática de grafos ha dado lugar a una serie de reglas que vale la pena citar aquí. 
Según Kozo Sugiyama en su libro “Graph Drawing and Applications”* las reglas estáticas (que sirven para dibujar un solo grafo y no una sucesión de ellos de forma dinámica) se dividen en 
  • Reglas básicas: se refieren a aspectos elementales como el solapamiento entre aristas vertices o ambos.
Reglas Básicas
KOOKKOOKKOOK
No solapar vérticesNo solapar aristas No solapar vértices con aristas
  • Reglas semánticas: son reglas de posicionamiento de vértices y de dibujo de arcos o aristas (enrutado) derivadas del significado de vértices y aristas. Por ejemplo dibujar el tamaño de un vértice o el grosor de una arista en función de su importancia. Suelen venir dadas por el usuario o son deducidas de la información de sus etiquetas asociadas.
Reglas Semánticas
Alinear vértices específicosDisponer vértices específicos en curvaDibujar vértices específicos con distinto tamaño
Emplazar vértices específicos en la fronteraAgrupar vértices específicosCentrar vértices específicos
  • Reglas estructurales: son reglas de posicionamiento y enrutado relacionadas sólo con las propiedades de la teoría de grafos. Por ejemplo colocar los vértices de mayor orden en el centro del dibujo o minimizar la longitud total de aristas, minimizar el numero de cruces entre vértices, etc.
Reglas estructurales
KOOKOKKO                     OKKOOK
Centrar los vértices con orden altoColocar los grafos isomorfos
(igual forma) de idéntica manera.
Emplazar en forma jerárquica
KOOKKOOKKOOK
Minimizar los cruces de aristasBuscar equilibrio en las dimensiones del dibujoOrganizar simétricamente
KOOKKOOKKOOK
Minimizar las esquinas en aristasDibujar caras como polígons convexosColocar los hijos simétricamente
KOOKKOOKKOOK
Evitar cruces de ramas diferentesEmplazamiento uniformeMinimizar el área de dibujo
KOOKKOOKKOOK
Minimizar la longitud total de aristasMinimizar la diferencia de tamaño de los vérticesMinimizar la longitud media de las aristas
Todos los dibujos realizados por el autor, inspirados en los presentes en el libro de Sugiyama
Estas reglas persiguen la optimización del dibujo y pretenden facilitar la representación de la forma más sencilla y clara posible. Que ello no es fácil dan cuenta los avances que cada año se muestran en las conferencias sobre representación de grafos .