40
GRAFOS

Grafos

Embed Size (px)

Citation preview

GRAFOS

Un grafo es una estructura de datos no lineal que sirve para representar relaciones arbitrarias (no necesariamente jerárquicas)

entre objetos de datos

Un grafo G= (V, R) compuesta de: Un conjunto V de vértices (nodos) Un conjunto R de ramas (arcos), conexiones entre los vértices de V

Ejemplo de grafo

V= {a, b, c, d, e, f}R= {(a,d), (a,e), (a,f), (b,c),…, (e,a), (f,b)}

INTRODUCCIÓN

TERMINOLOGÍA

Vértices: Son los objetos representados por punto dentro del grafo

Aristas: son las líneas que unen dos vértices

Aristas Adyacentes: dos aristas son adyacentes si convergen sobre el mismo vértice

Aristas Múltiples o Paralelas: dos aristas son múltiples o paralelas si tienen los mismos vértices en común o incidente sobre los mismos vértices

Lazo: es una arista cuyos extremos inciden sobre el mismo vértice

TERMINOLOGÍA

Arista Incidente : Una arista es incidente a un vértice si ésta lo une a otro vértice.

Vértice Aislado: Es un vértice de grado cero

Vértice Pendiente: Es aquel grafo que contiene sólo una arista, es decir tiene grado 1

Cruce: Son intersecciones de las aristas en puntos diferentes a los vértices

A B a

La a r i s ta a , es Inc iden te en l os Vér t i ces A Y

B .

4

1

2 3

b

a

c

41

2 3

b

a

cd e

f

El grado o valencia de un vértice es el número de aristas incidentes al vértice.

GRADO O VALENCIA

Vecindad de un vérticeEl grado del vértice x es el número de vecinos que tiene

Lema del apretón de manosLa suma de los grados de un grafo  es igual al doble del número de aristas

El Lema del apretón de manos también es cierto en los grafos dirigidos. Para ello hay que distinguir para cada nodo entre grados de entrada y de salida. Por lo tanto, el Lema se expresa del siguiente modo:

GRADO O VALENCIA

Grafos dirigidosSe distingue entre grado de entrada  , como el número de aristas que tiene al vértice x  como vértice final, y grado de salida   , como el número de aristas que tiene al vértice x  como vértice inicial, de forma que:

Matriz de adyacencias:  se asocia cada fila y cada columna a cada nodo del grafo, siendo los elementos de la matriz la relación entre los mismos, tomando los valores de 1 si existe la arista y 0 en caso contrario.

Lista de adyacencias:  se asocia a cada nodo del grafo una lista que contenga todos aquellos nodos que sean adyacentes a él.

FORMAS DE REPRESENTACIÓN

Existen diferentes implementaciones del tipo grafo: con una matriz de adyacencias (forma acotada) y con listas

y multilistas de adyacencia (no acotadas).

Tipos deGrafos

2. Grafo CompletoEl grafo completo de orden n, que se denota por , es un grafo con n vért ices, donde cada vért ice es adyacente a todos los demás.

1. Grafo NuloEl grafo nulo de orden n, que se denota por , es un grafo que t iene n vért ices y ninguna arista.

3. Grafo RegularUn grafo es regular (de grado d) si todos sus vért ices t ienen el mismo grado (d).

TIPOS DE GRAFOS

Grafo No

completo

TIPOS DE GRAFOS

4. Grafo BipartitoUn grafo G = (V, E) es bipart ito s i su conjunto de vért ices V admite una part ición en dos subconjuntos (disjuntos), y , de modo que cada arista de G sea incidente con un vért ice de y con un vért ice de (no hay adyacencias entre vért ices de una misma parte). Si cada vért ice de es adyacente a todos los vértices de , el grafo G se denomina bipart i to y completo.

TIPOS DE GRAFOS (DIRECCIÓN)

1. Grafos no dirigidos

Un grafo en el cual todas las aristas son no dir igidas se denominará "grafo no dir igido". El grafo no dir igido es aquel que no t iene sentido su arista. Un grafo no dir igido G representa elementos, y una arista (v, w) representa una incompatibi l idad entre los elementos v y w.

2. Grafos dirigidos o Dígrafos

Un grafo dir igido o dígrafo es un t ipo de grafo en el cual el conjunto de los vért ices t iene una dirección definida1 , a di ferencia del grafo general izado, en el cual la dirección puede estar especif icada o no.

V = {C, D, E, F, H}

E= {(E,H), (H,E), (E,C), (C,D), (D,F)}

VARIANTES DEL CONCEPTO DE GRAFO (DÍGRAFO)

2. Multígrafo

Si en un ‘grafo’ se permite la existencia de más de una arista entre un mismo par de vértices (arista múltiple), entonces se denomina multígrafo

1. Grafo Simple

Es un grafo o dígrafo que no tiene bucles y que no es multígrafo

Arcos múltiples o paralelos

VARIANTES DEL CONCEPTO DE GRAFO (DÍGRAFO)

3. Pseudografo

Si además se permite que un elemento esté relacionado consigo mismo (lazo), entonces se llama pseudografo

4. Grafo Ponderado

Un grafo G cuyas aristas tienen asociados valores reales, l lamados pesos, se denomina grafo ponderado.

Lazo o Bucle

Valor Asignad

o

Recorrido deGrafos

Exploración en anchura (BFS)Breadth First Search (BFS): A partir del nodo origen, recorrer por niveles de distancia a ese nodo.

1. Fijar nodo origen del recorrido (arbitrario)

EXPLORACIÓN (RECORRIDO) DE GRAFOS

Exploración en anchura (BFS)

2. Acceder a todos los nodos que están a distancia 1, es decir, directamente relacionados con el origen (existe un arco que los une).

EXPLORACIÓN (RECORRIDO) DE GRAFOS

Exploración en anchura (BFS)

3. Acceder a todos los nodos que están a distancia 2, es decir, directamente relacionados con los que está a distancia 1

EXPLORACIÓN (RECORRIDO) DE GRAFOS

Exploración en anchura (BFS)

El resultado del recorrido es una árbol, que incluye los nodos visitados y los arcos utilizados para acceder

a ellos.

EXPLORACIÓN (RECORRIDO) DE GRAFOS

Exploración en profundidad (DFS)

Depth First Search (DFS): A partir del nodo origen, avanzar a otro nodo no visitado y seguir el recorrido, de la misma manera, a partir de él.

EXPLORACIÓN (RECORRIDO) DE GRAFOS

Exploración en profundidad (DFS)

EXPLORACIÓN (RECORRIDO) DE GRAFOS

Exploración en profundidad (DFS)

El resultado del recorrido es una árbol, que incluye los nodos visitados y los arcos utilizados para acceder a

ellos.

EXPLORACIÓN (RECORRIDO) DE GRAFOS

Algoritmos deBúsqueda

Algoritmos de búsqueda del camino mínimo

1. Algoritmo Breadth-f irst search2. Algoritmo de Di jkstra3. Algoritmo de Bel lman-Ford4. Algoritmo de Floyd-Warshal l

ALGORITMOS DE BÚSQUEDA

Algoritmos de búsqueda del árbol de recubrimiento mínimo

1. Algoritmo de Prim

Los algoritmos de búsqueda en grafos nacen por la necesidad de crear un mecanismo de navegación autónoma, bien sea de robots, coches, o personajes en un videojuego.

Un algoritmo de búsqueda tratará, de encontrar un camino optimo entre dos nodos como por ejemplo un camino que minimice el coste de desplazamiento, o el número de pasos a real izar.

La expansión de la búsqueda se real iza en forma de árbol . Part iendo del nodo inicial , se extenderá la búsqueda a sus nodos vecinos, de cada uno de estos nodos vecinos, a sus respectivos nodos vecinos, y así hasta que uno de los nodos a los que se expande la búsqueda es el nodo objetivo.

1. Algoritmo Breadth-first search

Objetivo:

Ejemplo de uso:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo sin tener en cuenta los pesos de los nodos

Saber el número de escalas que hay que hacer desde un aeropuerto para llegar a otro

1. Algoritmo Breadth-first search

Pseudocódigo

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

método breadth_first_search(grafo, origen)inicializarcrear cola Qagregar origen a cola Qmientras Q no esté vacia:

sacar elemento v de la cola Qmarcar como visitado vpara cada nodo adyacente w a v en el grafo:

si w no ha sido visitado y no está en la cola:actualizar el contador de w (ahora es

v+1)actualizar el predecesor de w (ahora

es v)insertar w dentro de la cola Q:

1. Algoritmo Breadth-first search Ejemplo:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

2. Algoritmo de DijkstraEl algoritmo de Di jkstra, también

l lamado algoritmo de caminos mínimos, es un algoritmo para la determinación del  camino más corto dado un vért ice origen al resto de los vért ices en un grafo con pesos en cada arista. Su nombre se ref iere a Edsger Di jkstra, quien lo describió por primera vez en 1959.

La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos que parten del vért ice origen y que l levan a todos los demás vértices; cuando se obtiene el camino más corto desde el vért ice origen, al resto de vértices que componen el grafo, el algoritmo se detiene. El algoritmo es una especial ización de la búsqueda de costo uniforme, y como tal , no funciona en grafos con aristas de coste negativo (al elegir s iempre el nodo con distancia menor, pueden quedar excluidos de la búsqueda nodos que en próximas iteraciones bajarían el costo general del camino al pasar por una arista con costo negativo).

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

2. Algoritmo de Dijkstra

Objetivo:

Ejemplo de uso:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo con pesos positivos

Averiguar la ruta más corta entre dos poblaciones a través de una red de carreteras

2. Algoritmo de Dijkstra

Pseudocódigo

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

método dijkstra(grafo, origen)inicializarcrear cola de prioridades Q ordenada de menor a mayor pesoagregar origen a cola Qmientras Q no esté vacia:

sacar elemento v de la cola Qmarcar como visitado vpara cada nodo adyacente w a v en el grafo:

si (peso de w) > (peso de v + peso entre v y w):actualizar el peso de w (disminuye)actualizar el predecesor de w (ahora es v)si w no ha sido visitado:

si w está en la cola Q: actualizar prioridad de w

y si w no está en la cola: insertar w dentro de la

cola Q:

2. Algoritmo de Dijkstra Ejemplo:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

3. Algoritmo de Bellman-Ford

El algoritmo de Bel lman-Ford (algoritmo de Bel l -End-Ford) genera el camino más corto en un grafo dir igido ponderado (en el que el peso de alguna de las aristas puede ser negativo). El  algoritmo de Di jkstra resuelve este mismo problema en un t iempo menor, pero requiere que los pesos de las aristas no sean negativos, salvo que el grafo sea dir igido y sin ciclos. Por lo que el Algoritmo Bel lman-Ford normalmente se uti l iza cuando hay aristas con peso negativo. Este algoritmo fue desarrol lado por Richard Bel lman, Samuel End y Lester Ford.

Según Robert Sedgewick, “Los pesos negativos no son simplemente una curiosidad matemática; […] surgen de una forma natural en la reducción a problemas de caminos más cortos”, y son un ejemplo de una reducción del problema del camino hamiltoniano que es NP-completo hasta el problema de caminos más cortos con pesos generales. Si un grafo contiene un ciclo de coste total negativo entonces este grafo no t iene solución. El algoritmo es capaz de detectar este caso.

Si el grafo contiene un ciclo de coste negativo, el algoritmo lo detectará, pero no encontrará el camino más corto que no repite ningún vért ice. La complej idad de este problema es al menos la del problema del camino más largo de complej idad NP-Completo.

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

3. Algoritmo de Bellman-Ford

Objetivo:

Ejemplo de uso:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

Encontrar el camino mínimo desde un nodo inicial a todos los demás nodos de un grafo con pesos positivos y negativos

Protocolos de encaminamiento de información

3. Algoritmo de Bellman-Ford

Pseudocódigo

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

método bellman_ford(grafo, origen)inicializarcrear cola Qagregar origen a cola Qmientras Q no esté vacia:

sacar elemento v de la cola Qsi hay bucle negativo

“bucle negativo”y si no, para cada nodo adyacente w a v en el grafo:

si (peso de w) > (peso de v + peso entre v y w):actualizar el peso de w (disminuye)actualizar el predecesor de w (ahora

es v)si w no está en la cola:

insertar w dentro de la cola Q:

3. Algoritmo de Bellman-Ford Ejemplo:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

4. Algoritmo de Floyd-Warshall

Objetivo:

Ejemplo de uso:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

Encontrar el camino mínimo entre todos los pares de nodos de un grafo

Averiguar la ruta más corta entre TODAS las poblaciones a través de una red de carreteras

4. Algoritmo de Floyd-Warshall

Pseudocódigo

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

método floyd-warshall(grafo)M[i, j] := ∞ ∀i != jM[i, j] := p(i, j) ∀(i, j) ∈ en el grafo M[i, i] := 0 ∀i

for k := 1 to n dofor i := 1 to n do

for j := 1 to n dosi M[i, j] > M[i, k] + M[k, j]

M[i, j] = M[i, k] + M[k, j]for i := 1 to n do

si M[i, i] < 0 “bucle negativo”

4. Algoritmo de Floyd-Warshall Ejemplo:

ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO

ALGORITMOS DE BÚSQUEDA DEL ÁRBOL DE RECUBRIMIENTO MÍNIMO

1. Algoritmo de Prim

Objetivo:

Ejemplo de uso:

Encontrar el árbol de recubrimiento mínimo en un grafo conexo, no dirigido

Trazar la mínima cantidad de cable posible para cubrir las necesidades de una nueva urbanización

Un grafo es conexo si cada par de vértices está conectado por un camino

1. Algoritmo de Prim

Pseudocódigo

ALGORITMOS DE BÚSQUEDA DEL ÁRBOL DE RECUBRIMIENTO MÍNIMO

método prim(grafo, origen)

1- marcar un nodo dentro del grafo, el cual será el nodo de partida

2- seleccionar la arista de menor valor que salga del nodo marcado

3- marcar el nodo al que llega la arista seleccionada en el paso previo

4- repetir los pasos 2 y 3 de tal modo que se vayan obteniendo aristas entre nodos marcados y otros que no lo están

5- el algoritmo termina cuando están todos los nodos marcados

1. Algoritmo de Prim Ejemplo:

ALGORITMOS DE BÚSQUEDA DEL ÁRBOL DE RECUBRIMIENTO MÍNIMO