Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AGENDA
Definiciones Aplicaciones Ejemplos Representaciones posibles
DEFINICIN INFORMAL
Es una coleccin de entidades (denominadas nodos o vrtices) conectadas por un conjunto de enlaces (denominados aristas o arcos).
1 2
arista
5 4 3 7 6
vrtice
DEFINICIN FORMAL
Notacin de conjuntos.
Coleccin G = (V, A) con A VxV. V: conjunto de vrtices, denotados genricamente como v,w. A: conjunto de aristas, denotadas como (v, w) con v, w V.
En palabras:
Un grafo G = (V, A) consta de un conjunto de vrtices V y un conjunto de aristas A. Cada arista (arco) es un par (v, w) donde v, w V. Si el par es ordenado, entonces el grafo es dirigido. Si el par tiene asociado un tercer valor (su peso), entonces el grafo es ponderado.
EJEMPLOS
1 2 5 4 3 6
1 4 5
7
2 2
1
4 6 6 1
3
1 2
-10 5 6 7
3 2
MS DEFINICIONES
Un camino en un grafo es una secuencia de vrtices w1, w2, ..., wn tal que (wi, wi+1) A, 1<=i<n. La longitud de un camino es la cantidad de aristas del camino. Se permiten caminos de un vrtice a si mismo; si este camino no contiene aristas, entonces el camino tiene longitud 0. Una arista (v,v) de un grafo es un ciclo. Un camino simple es un camino tal que todos los vrtices son distintos, excepto que el primero y el ltimo pueden ser el mismo.
MS DEFINICIONES
Un grafo dirigido es acclico (GDA) si no tiene ciclos. Ejemplo: Previaturas en las materias de una carrera.
P1
P2 LG
A1
A2
M1
MD
MS DEFINICIONES
Un grafo no dirigido es conexo si hay un camino desde cualquier vrtice a cualquier otro. Un grafo dirigido con esta propiedad se denomina fuertemente conexo.
MS DEFINICIONES
Si un grafo dirigido no es conexo, pero el grafo subyacente (sin direccin en los arcos) es conexo, se dice que el grafo es dbilmente conexo.
MS DEFINICIONES
Un grafo completo es un grafo en el cual hay una arista entre cualquier par de vrtices.
K3
K8
APLICACIONES VARIAS
Sistemas de informacin geogrfica. Representacin estructural de vnculos en pginas web. Representacin estructural y flujo de redes (grafos ponderados):
SISTEMA DE AEROPUERTOS
Madrid
Nueva Delhi
Miami Gibraltar
Rio
Mvd BsAs
SISTEMA DE AEROPUERTOS
Cada aeropuerto es un vrtice. Cada arista representa un vuelo de la aerolnea. La arista podra tener un peso que represente la cantidad de Kms o el costo en U$S del tramo. El grafo es dirigido ya que puede ser ms largo o costar ms volar en direcciones diferentes. Es deseable que el grafo modelado sea fuertemente conexo de manera que podamos volar de cualquier ciudad a cualquier otra (aunque sea haciendo escalas).
GRAFOS INTERFAZ
public interface IGrafo { //Pre: v no pertenece al grafo.
// 0<v<=capacidad grafo
//Post: Agrega el vrtice v al grafo public void agregarVertice(int v);
GRAFOS INTERFAZ
//Pre: El vrtice v existe en el grafo //Post: Elimina el vrtice y todas las aristas a las que pertenezca public void eliminarVertice(int v); //Pre: La arista origen - destino existe en el grafo //Post: Elimina la arista origen - destino public void eliminarArista(int origen, int destino);
GRAFOS INTERFAZ
//Pre: El vrtice v existe en el grafo //Post: Retorna una lista con los vrtices adyacentes de v. // Si v no tiene adyacentes retorna la lista vaca public Lista verticesAdyacentes(int v); //Pre: a y b son vrtices del grafo
GRAFOS INTERFAZ
//Post: Retorna true sii el vrtice fue ingresado al grafo
Matriz de Adyacencia.
Si el grafo es no ponderado, VALOR = 1, NO_VALOR = 0 (matriz booleana) Si el grafo es ponderado, el valor utilizado ser la ponderacin. Ej cantidad de kms. entre un aeropuerto y otro.
2 5 4
3 6
this.existe = false;
this.peso = 0; } public Arco(int peso) { this.existe = true; this.peso = peso; } }
public class GrafoMatriz implements IGrafo{ int size; int cantNodos; Arco[][] matrizAdyacencia; boolean[] nodosUsados;
3
2 5 4 7 6
//Crea el grafo vacio (sin nodos ni aristas) con capacidad de almacenamiento de n vrtices public GrafoMatriz(int cantNodos) { this.size = 0; this.cantNodos = cantNodos; this.matrizAdyacencia = new Arco[cantNodos+1][cantNodos+1]; for (int i = 1; i<=cantNodos; i++)
this.nodosUsados[v]=false;
this.size --; //Elimino las aristas donde v es miembro
for(int i=1;i<=this.cantNodos;i++){
this.matrizAdyacencia[i][v] = new Arco(); this.matrizAdyacencia[v][i] = new Arco(); } } public boolean esVacio() { return this.size==0; } public boolean sonAdyacentes(int a, int b) { return this.matrizAdyacencia[a][b].existe; }
public Lista verticesAdyacentes(int v) { Lista l = new Lista(); for(int i=1; i<=this.cantNodos; i++){ if(this.sonAdyacentes(v, i)){ l.insertarInicio(i); } } return l;
}
public boolean estaVertice(int v) { return this.nodosUsados[v]; }
Ventajas
Desventajas
Consume VxV de espacio de memoria. Si el grafo no es denso la representacin no parece tan adecuada.
Ejemplo de Desventaja
LISTA DE ADYACENCIA
Se define un arreglo de tamao |V|, cada vrtice almacena la lista de aristas que salen de l hacia el resto de sus vrtices adyacentes. 3 4 1 2 1 2 2 3 4 5 4 6 6 4 7 7
6
5
5
6
7
2 5 4 7 6
public class GrafoLista{ int size; int cantNodos; ListaAdy[] listaAdyacencia; boolean[] nodosUsados;
//Crea el grafo vacio (sin nodos ni aristas) con capacidad de almacenamiento de n vrtices public GrafoLista(int n) { this.size = 0; this.cantNodos = n; this.listaAdyacencia = new ListaAdy[this.cantNodos+1];
public void agregarArista(int origen, int destino, int peso) { this.listaAdyacencia[origen].insertar(destino, peso); } public void agregarVertice(int v) { this.nodosUsados[v]=true;
this.size ++;
} public void eliminarArista(int origen, int destino) { this.listaAdyacencia[origen].eliminar(destino); } public boolean esVacio() { return this.size==0;
}
public boolean sonAdyacentes(int a, int b) { return this.listaAdyacencia[a].pertenece(b); }
this.nodosUsados[v]=false;
this.size --; //Elimino las aristas donde v es miembro this.listaAdyacencia[v] = new ListaAdy(); //BUSCAR EN TODOS LOS VERTICES LA ARISTA for (int i = 1; i<=cantNodos; i++) this.listaAdyacencia[i].eliminar(v); } public ListaArco verticesAdyacentes(int v) { return this.listaAdyacencia[v]; } public boolean estaVertice(int v) { return this.nodosUsados[v]; }
LISTAS DE ADYACENCIA
Ventajas
El array que tenemos que definir es de tamao V. Y luego tenemos que agregar un nodo por cada una de las aristas. Lo cul si el grafo no es muy denso consume significativamente menos memoria que VxV de la matriz de adyacencia. Retornar la lista de vrtices adyacentes a un vrtice dado es simple.
Desventajas
GRAFOS MS DEFINICIONES
Un c a m i n o h a m i l t o n i a n o en un grafo G, es aquel camino que pasa una y solo una vez por cada vrtice del grafo.
Si adems el ltimo vrtice visitado es adyacente al inicial, entonces es un ciclo hamiltoniano
GRAFOS MS DEFINICIONES
Un c a m i n o e u l e r i a n o en un grafo G, es aquel camino que pasa una y solo una vez por cada arista del grafo.
1) Podemos encontrar caminos Eulerianos en las figuras? 2) Cules son los vrtices candidatos a ser inicio y fin en la casita?
GRAFOS MS DEFINICIONES
Sea una grafo G conexo, si existe v V tal que G {v} es desconexo, entonces v se denomina p u n t o d e articulacin. Si G no tiene puntos de articulacin es b i c o n e x o . Un rbol es un grafo acclico, conexo y no dirigido.
Un rbol con n vrtices tiene n-1 aristas. Si se agrega una arista a un rbol, se obtiene un grafo con un ciclo. Si se elimina una arista a un rbol, entonces se obtiene un grafo no conexo.
Subgrafo recubridor:
Sea el grafo G = (V, A) conexo y no dirigido, el subgrafo T = (V, A) es un rbol de cubrimiento de G, si es conexo y si A A es tal que |A| es mnimo.
1 2 5 4 3 6 1 2 5
4 7
3 7
Recorrer un grafo significa tratar de alcanzar todos los vrtices relacionados con un vrtice en particular que llamaremos vrtice de salida. Existen bsicamente dos tcnicas para recorrer un grafo:
DFS Depth First Search. BFS Breadth First Search.
Para realizar estas recorridos consideramos que un grafo como G={V,A}, y cada vrtice almacenar un estado que tomar los valores (visitado, no visitado).
RECORRIDAS - DFS
El recorrido DFS explora sistemticamente las aristas del grafo de manera que primero se visitan los vrtices adyacentes a los visitados ms recientemente. De esta forma se va profundizando en el grafo, es decir, alejndose progresivamente del nodo inicial. Esta estrategia admite una implementacin simple en forma recursiva.
RECORRIDAS - DFS
Dado un vrtice v de partida, se lo marca como visitado. Luego para todo vrtice adyacente a v que no haya sido visitado, se lo toma como nuevo punto de partida y se invoca recursivamente al procedimiento. Cuando estn marcados todos los vrtices adyacentes a v, el recorrido que comenz en v ha finalizado. Si queda algn vrtice que no haya sido visitado, se lo toma como nuevo punto de partida hasta visitar todos los vrtices.
RECORRIDAS - DFS
Procedimiento DFS (vertice v) Comienzo Marcar v Para cada w adyacente a v Si w no marcado entonces DFS(w) Fin Para Fin
RECORRIDAS - DFS
Procedimiento Recorrido_DFS(grafo G) //Todos los vrtices comienzan no marcados. Comienzo Para cada v V: Si v no-marcado entonces DFS(v) Fin
RECORRIDAS - DFS
RECORRIDAS - DFS
RECORRIDAS - DFS
RECORRIDAS - DFS
RECORRIDAS - DFS
RECORRIDAS - DFS
RECORRIDAS - DFS
RECORRIDAS - DFS
In-Order, Pre-Order, Post-Order? Se puede establecer un claro paralelismo entre el recorrido en pre-order de un rbol y el DFS sobre un grafo. Qu pasa si no se visitan todos los vrtices del grafo?
Hemos encontrado un grafo no conexo. Aplicamos DFS a cada una de las componentes conexas.
RECORRIDAS - DFS
RECORRIDAS - DFS
El orden de los vrtices del grafo que produce un DFS no es nico. Depende de en qu vrtice comience el recorrido y en qu orden se van tomando los adyacentes de un vrtice dado. Ejemplo:
RECORRIDAS - DFS
Recorrido 1 {1, 2, 3, 6, 5, 4, 7}
Inicio en vrtice 1, Tomando adyacentes por orden de etiqueta. Inicio en vrtice 5, Tomando adyacentes por orden de etiqueta. Inicio en vrtice 7, Tomando adyacentes por mayor etiqueta.
Recorrido 2 {5, 1, 2, 3, 6, 4, 7}
Recorrido 3 {7, 5, 6, 3, 2, 1, 4}
RECORRIDAS - BFS
El recorrido BFS comienza en un vrtice dado y visita primero a todos sus vrtices adyacentes. Luego para cada vrtice adyacente, recorre los vecinos respectivos no visitados. As sucesivamente hasta alcanzar todos los vrtices. Esta estrategia admite una implementacin simple en forma iterativa.
RECORRIDAS - BFS
RECORRIDAS - BFS
RECORRIDAS - BFS
RECORRIDAS - BFS
RECORRIDAS - BFS
RECORRIDAS - BFS
Procedimiento BFS (vertice v) Comienzo CrearCola(Q)
Marcar(v)
Enqueue(Q,v) Mientras No-Vacia(Q) u = Front(Q)
Dequeue(Q)
Para cada w adyacente a u Si w no marcado Marcar(w) Enqueue(Q,w) Fin Si Fin Para Fin Mientras Fin
RECORRIDAS - BFS
Procedimiento Recorrido_BFS(grafo G) //Todos los vrtices comienzan no marcados. Comienzo Para cada v V: Si v no-marcado entonces BFS(v) Fin
RECORRIDAS - BFS
Al aplicar BFS obtenemos los caminos ms cortos desde el vrtice inicial a todos los dems vrtices del grafo. Tambin obtenemos un rbol de cubrimiento para el grafo.
DFS y BFS
Conectividad de un grafo no dirigido. Si al aplicar DFS o BFS desde cualquier * vrtice del grafo logramos marcar todos los dems vrtices entonces podemos afirmar que el grafo es conexo. Generacin de rbol de cubrimiento.
BFS
*Cualquier: Debe cumplirse para cualquiera de los nodos sin importar cual. No alcanza que se cumpla para uno en particular, debe cumplirse para todos.
ESQUELETO MINIMO
Un esqueleto o rbol de cubrimiento del grafo G es un subgrafo que es un rbol y que contiene todos los vrtices de G El esqueleto mnimo de un grafo ponderado es aquel esqueleto de valor mnimo Permite calcular el costo mnimo de conexin de un grafo.
ALGORITMO DE DIJKSTRA
v H
2
14
v G
B
9 1
2 1 4
6 3
v F
1
v D
A
C
v E
ALGORITMO DE DIJKSTRA
Inicializacion: N = {A} // Se toma el vrtice A como el inicial. Para todos los vrtices del grafo if v adyacente a A D(v) = c(A,v) else D(v) = infinito Loop Encontrar w que no pertenezca a N/ D(w) sea mnima. Agregar w a N Actualizar D(v) para todo v adyacente a w y que no este en N, de forma: D(v) = min( D(v), D(w) + c(w,v)) until todos los vrtices estn en N. //c denota costo.
ALGORITMO DE DIJKSTRA
Paso N D(A) P(A) D(B) P(B) D(C) P(C) D(D) P(D) D(E) P(E) D(G) P(G) D(H) P(H)
0 1 2 3 4 5 6 7
F
F,E F,E,D F,E,D,C F,E,D,C, G F,E,D,C, G,B F,E,D,C, G,B, A F,E,D,C, G,B,A,H 7,C 7,C 11,D 5,C 5,C 4,E 3,D
3,F
2,E
1,F
6,F
6,F 3,D
3,D
17,G 7,B 7,B
6,B
A B C D
D,2 H,1 F,4 F,9 G,2 D,9 F,3 D,8 G,3 H,7 G,7 H,8
E
F G