Programación 3: Grafos, representación y operaciones

27
Grafos, Representación y Operaciones PROGRAMACIÓN 3 REALIZADO POR: PAOLA REMACHE

Transcript of Programación 3: Grafos, representación y operaciones

Page 1: Programación 3: Grafos, representación y operaciones

Grafos, Representación y Operaciones

PROGRAMACIÓN 3

REALIZADO POR: PAOLA REMACHE

Page 2: Programación 3: Grafos, representación y operaciones

CONTENIDO• Conceptos

• Grafo• Nodo(Grado)• Camino

• Representación de los Grafos• Lista de adyacencia• Recorrido de un grafo• Conexiones en un grafo• Matriz de caminos• Puntos de articulación

Page 3: Programación 3: Grafos, representación y operaciones

GRAFODIRIGIDO

NO DIRIGIDO -> DIGRAFO

Un grafo permite modelar relaciones arbitrarias entre

objetos. Un grafo G = (V,A) es un par formado por un conjunto de

vértices o nodos, V, y un conjunto de arcos o aristas, A.

Cada arco es el par (u,w), siendo u, w dos vértices relacionados.

Page 4: Programación 3: Grafos, representación y operaciones

DirigidoUn Grafo Dirigido G consiste de un conjunto V de vértices  y un conjunto E al conjunto de aristas  del grafo.

V={a, b, c, d}E={(a,c), (a,b), (b,c), (b,d), (c,d)}

Page 5: Programación 3: Grafos, representación y operaciones

DirigidoUn enlace es un par ordenado de vértices (v, w), donde v es la cola y w corresponde a la cabeza del enlace.Los vértices de un grafo dirigido pueden usarse para representar objetos y los enlaces relaciones entre los objetos, ejemplo de ello que los vértices pueden representar ciudades y los enlaces vuelos aéreos entre ciudades.

Page 6: Programación 3: Grafos, representación y operaciones

NO DirigidoSea G un Grafo no Dirigido, donde G=(V,E) y V corresponde al conjunto de vértices y E al conjunto de aristas del grafo.Se diferencia de un Grafo Dirigido debido a que cada arista en E es un par no ordenado de vértices. Si (v,w) es una arista no dirigida -> (v,w) = (w,v).V={a, b, c, d}E={(a,c),(c,a),(a,b),(b,a) (b,c),(c,b),(b,d),(d,b), (c,d),(d,c)}

Page 7: Programación 3: Grafos, representación y operaciones

GRADO DE UN NODO

Número de Aristas que tiene el nodo Grado ENTRADA: Aristas que llegan al nodo.Grado SALIDA: Aristas que salen del nodo.

BUCLE arco al mismo vértice.

Page 8: Programación 3: Grafos, representación y operaciones

COSTOSLos enlaces tanto para los grafos Dirigidos como No Dirigidos tienen un costo (valor), por lo tanto son grafos etiquetados.

Page 9: Programación 3: Grafos, representación y operaciones

CAMINO

GRAFO ETIQUETADO GRAFO NO ETIQUETADO)

Secuencia de Vértices

LONGITUD: Suma de los pesos de las aristas que conectan dichos vértices

LONGITUD: Numero de aristas que conectan dichos vértices

Page 10: Programación 3: Grafos, representación y operaciones

Matriz de Caminos.

a b c da 1 1 1 1b 1 1 1 1c 1 1 1 1d 0 0 0 0

Page 11: Programación 3: Grafos, representación y operaciones

OPERACIONES BÁSICAS

• arista (u, v). Añade el arco o arista (u,v) al grafo..• adyacente(u,v). Operación que devuelve cierto si los

vértices u, v forman un arco.• nuevoVértice(u). Añade el vértice u al grafo G..

Page 12: Programación 3: Grafos, representación y operaciones

Creación de un Grafo (matriz)

Page 13: Programación 3: Grafos, representación y operaciones
Page 14: Programación 3: Grafos, representación y operaciones

MATRIZ DE ADYACENCIALa forma más sencilla de representación es mediante una matriz, de tantas filas/columnas como nodos, que permite modelar fácilmente. En los grafos no dirigidos la matriz de adyacencia siempre es simétricaEs una matriz de unos y ceros, que indican si dos vértices son adyacentes o no.En un grafo valorado, cada elemento representa el peso de la arista, y por ello se la denomina matriz de pesos.

D F K L R

Page 15: Programación 3: Grafos, representación y operaciones

Ejemplo:

Page 16: Programación 3: Grafos, representación y operaciones

Ventajas

Se puede determinar en un tiempo fijo y constante si un enlace(arco) pertenece o no al grafo.Es fácil determinar si existe o no un arco o enlace, solo se debe posicionar en la matriz.

Es fácil determinar si existe un ciclo en el grafo, basta multiplicar la matriz por ella misma n veces hasta obtener la matriz nula(no hay ciclos) o bien una sucesión periódica de matrices(hay ciclo)

Desventajas Se requiere un almacenamiento |v|*|v|. Es decir O(n^2).

Solo al leer o examinar la matriz puede llevar un tiempo de O(n^2).

Page 17: Programación 3: Grafos, representación y operaciones

LISTAS DE ADYACENCIALas listas de adyacencia son una estructura multienlazada formada por una tabla directorio en la que cada elemento representa un vértice del grafo, del cual emerge una lista enlazada con todos sus vértices adyacentes. Es decir, cada lista representa los arcos con el vértice origen del nodo de la lista directorio, por eso se llama lista de adyacencia.

Page 18: Programación 3: Grafos, representación y operaciones

Ejemplo

Page 19: Programación 3: Grafos, representación y operaciones

Ventajas

La lista de adyacencia requiere un espacio proporcional a la suma del número de vértices más el número de enlaces(arcos).  Hace buen uso de la memoria.

Se utiliza bastante cuando el número de enlaces es mucho menor que O(n^2).matrices(hay ciclo)

Desventajas La representación con lista de adyacencia es que puede llevar un tiempo O(n) determinar si existe un arco del vértice i al vértice j, ya que  pueden haber O(n) vértices en la lista de adyacencia. Para el vértice i.

Page 20: Programación 3: Grafos, representación y operaciones

OPERACIONES CON LISTAS DE ADYACENCIA

• Nuevo vértice Si el vértice ya está en la tabla no hace nada si es nuevo, se asigna a continuación del último.

• Arista Esta operación da entrada a un arco del grafo. El método tiene como entrada el vértice origen y el vértice destino. El método adyacente() determina si la arista ya está en la lista de adyacencia, y, por último, el Arco se inserta en la lista de adyacencia del nodo origen. Para añadir una arista en un grafo valorado, se debe asignar el factor de peso al crear el Arco.

• Borrar arco La Consiste en eliminar el nodo de la lista de adyacencia del vértice origen que contiene el arco del vértice destino. Una vez encontrada la dirección de ambos vértices en la lista de nodos se accede a la correspondiente lista de adyacencia para proceder a borrar el nodo quecontiene el vértice destino.

Page 21: Programación 3: Grafos, representación y operaciones

• Adyacente La operación determina si dos vértices, v1 y v2, forman un arco. En definitiva, si el vértice v2 está en la lista de adyacencia de v1. El método buscarLista() devuelve la dirección del nodo que contiene al arco, si no está devuelve null.• Borrar vértice Eliminar un vértice de un grafo es una

operación que puede ser considerada costosa en tiempo de ejecución, ya que supone acceder a cada uno de los elementos de la multiestructura.

Page 22: Programación 3: Grafos, representación y operaciones

RECORRIDO DE UN GRAFOHay dos formas de recorrer un grafo: recorrido en profundidad y recorrido en anchura. Si el conjunto de nodos marcados se trata como una cola, el recorrido es en anchura; si se trata como una pila, el recorrido es en profundidad.

PROFUNDIDAD-ANCHURAEl orden en el recorrido en profundidad es el que determina la estructura pila.Utiliza una cola en la que se guardan los vértices adyacentes al que se ha procesado. Para determinarsi un vértice está o no marcado se pueden seguir varias alternativas.

Page 23: Programación 3: Grafos, representación y operaciones

CONEXIONES EN UN GRAFO

Si existe un camino entre cualquier par de nodos.

DirigidoFUERTEMENT

E CONEXONo Dirigido

CONEXO

Page 24: Programación 3: Grafos, representación y operaciones

Componentes ConexasSubconjuntos de vértices que mutuamente están conectados; es decir, las componentes conexas del mismo. 1. Realizar un recorrido del grafo a partir de cualquier vértice w.2. Si en el recorrido se han marcado todos los vértices, entonces el grafo es conexo.3. Si el grafo no es conexo, los vértices marcados forman una componente conexa.4. Se toma un vértice no marcado, z, y se realiza de nuevo el recorrido del grafo a partir de z. Los nuevo vértices marcados forman otra componente conexa.5. El algoritmo termina cuando todos los vértices han sido marcados (visitados).

Page 25: Programación 3: Grafos, representación y operaciones

Componentes Fuertemente Conexas

De no ser fuertemente conexo se pueden determinar componentes fuertemente conexas del grafo.1. Obtener el conjunto de vértices descendientes del vértice de partida.

Recorrido en profundidad.2. Obtener el conjunto de ascendientes.3. Los vértices comunes del conjunto de descendientes y ascendientes

es el conjunto de vértices que forman la componente fuertemente conexa a la que pertenece v. Si este conjunto es el conjunto de todos los vértices del grafo, entonces es fuertemente conexo

4. Si no es un grafo fuertemente conexo se selecciona un vértice cualquiera y se procede de la misma manera, es decir, se repite a partir del primer paso hasta obtener todas las componentes fuertes del grafo.

Page 26: Programación 3: Grafos, representación y operaciones

Puntos de Articulación de un Grafo

Un punto de articulación de un grafo no dirigido es un vértice v que tiene la propiedad de que si se elimina junto a sus arcos, el componente conexo en que está el vértice se divide en dos o más componentes.

Page 27: Programación 3: Grafos, representación y operaciones

Búsqueda de Puntos de Articulación de un Grafo

El algoritmo de búsqueda se basa en el recorrido en profundidad para encontrar todos los puntos de articulación. Los sucesivos vértices por los que se pasa en el recorrido en profundidad de un grafo se puede representar mediante un árbol de expansión. La raíz del árbol es el vértice de partida, A y cada arco del grafo será una arista en el árbol.