Vous êtes sur la page 1sur 15

Exploracin de grafos

Anlisis y Diseo de Algoritmos

Exploracin de grafos
Grafos Recorridos sobre grafos
Bsqueda primero en profundidad Bsqueda primero en anchura

Backtracking (vuelta atrs)


Descripcin general Espacio de soluciones Implementacin Ejemplos

Branch & Bound (ramificacin y poda)


Descripcin general Estrategias de ramificacin Implementacin Ejemplos

Grafos
Grafo G = (V,E) V: Conjunto de vrtices o nodos del grafo. E VxV VxV: : Conjunto de aristas o arcos. Tipos de grafos Grafos no dirigidos: Aristas (no orientadas). (v,w) v,w) = (w,v (w,v) ) v w

Grafos dirigidos: Arcos (con direccin). (v,w) v,w) (w,v) w,v) v w


2

Grafos
Ejemplo: US Biotech Industry

Grafos - Definiciones
Grafos no dirigidos Grado de un vrtice: Nmero de aristas que lo contienen. Grafos dirigidos Grado de salida de un vrtice v: Nmero de arcos cuyo vrtice inicial es v. Grado de entrada de un vrtice v: Nmero de arcos cuyo vrtice final es v.

Grafos - Definiciones
Nodos/vrtices adyacentes: Vrtices conectados por una arista (o un arco). v w

Aristas/arcos adyacentes: Arcos/aristas con un vrtice comn. u v w

Bucle: Arco/arista cuyos vrtices inicial y final coinciden. v


5

Grafos - Definiciones
Camino [path]: path]: Sucesin de arcos adyacentes tal que el vrtice final de cada arco coincide con el inicial del siguiente. Secuencia (w1, w2, ..., wk) V tal que (w1, w2), (w2, w3), ..., (wk-1, wk) E. Longitud del camino: camino: Nmero de arcos del camino (k(k-1). Circuito (o ciclo): Camino que empieza y acaba en el mismo vrtice.

Grafos - Definiciones
Grafo conexo: Un grafo no dirigido es un grafo conexo si para todo par de nodos u y v existe una camido de u a v. Componentes conexas: Cada uno de los conjuntos maximales conexos.

Grafos - Definiciones
Tipos de grafos Grafo etiquetado: Cada arista y/o vrtice tiene asociada una etiqueta/valor. Grafo ponderado = Grafo con pesos: Grafo etiquetado en el que existe un valor numrico asociado a cada arista o arco. Multigrafo: Grafo en el que se permite que entre dos vrtices exista ms de una arista o arco.
8

Grafos - Definiciones
rbol: Grafo conexo que no contiene ciclos. Teorema Sea G un grafo de n nodos. Cualquier pareja de las siguientes afirmaciones implica la tercera: G es conexo. G no contiene ciclos. G tiene nn-1 aristas.
9

Grafos - Representacin
Representacin mediante matrices de adyacencia
1 2 3 4 5 6 7 8 1 0 1 1 0 0 0 0 0 2 1 0 1 1 1 0 0 0 3 1 1 0 0 1 0 1 1 4 0 1 0 1 1 0 0 0 5 0 1 1 1 0 1 0 0 6 0 0 0 0 1 0 0 0 7 0 0 1 0 0 0 0 1 8 0 0 1 0 0 0 1 0

Matriz de adyacencia de tamao |V|x|V V|x|V| | A[u][v] = 1 si (u, v) E. A[u][v] = 0 si (u, v) E.


10

Grafos - Representacin
Representacin mediante matrices de adyacencia Ventaja: Acceso eficiente a una arista, (1). Inconvenientes: (|V|2) en identificar todas las aristas. aristas. Espacio proporcional a |V|2 (se (s desperdicia memoria si el grafo es poco denso).

11

Grafos - Representacin
Representacin mediante listas de adyacencia
1 2 3 4 5 6 7 8 2 1 1 2 2 5 3 3 8 7 3 3 2 5 3 4 6 4 5 5 7 8

Array de listas enlazadas de nodos adyacentes.

12

Grafos - Representacin
Representacin mediante listas de adyacencia Ventajas: Espacio proporcional a |V|+|E|. (representacin adecuada para grafos poco densos). (|V|+|E|) en identificar todas las aristas. Inconvenientes: Se tarda O(grado(u)) en comprobar si (u,v)E. Ineficiente para encontrar los arcos que llegan a un nodo (solucin: usar estructuras de listas mltiples).
13

Recorridos sobre grafos


Se parte de un nodo dado y se visitan los vrtices del grafo de manera ordenada y sistemtica, pasando de un vrtice a otro a travs de las aristas del grafo. Tipos de recorridos: Bsqueda primero en profundidad: Equivalente al recorrido en preorden de un rbol. Bsqueda primero en anchura: Equivalente al recorrido de un rbol por niveles.
14

Recorridos sobre grafos


Bsqueda primero en profundidad [DFS: DepthDepth-First Search Search] ]
r v
s

t x

u y

Pila S={}

r v

t x

u y

Pila S={s}
r

r v

t x

u y

Pila S={r,s S={r,s} }


r v

w
15

Recorridos sobre grafos


Bsqueda primero en profundidad [DFS: DepthDepth-First Search Search] ]
r v
s

t x

u y

Pila S={v,r,s S={v,r,s} }


r v

w t u x x

r v

t x

u y

Pila S={w,s S={w,s} }

r v

t x

u y

Pila S={t,w,s S={t,w,s} }


16

Recorridos sobre grafos


Bsqueda primero en profundidad [DFS: DepthDepth-First Search Search] ]
r v
s

t x

u y

Pila S={u,t,w,s S={u,t,w,s} }


r v

w t u y x x x

r v

t x

u y

Pila S={y,u,t,w,s S={y,u,t,w,s} }

r v

t x

u y

Pila S={ S={x,y,u,t,w,s} x,y,u,t,w,s}

17

Recorridos sobre grafos


Bsqueda primero en profundidad [DFS: DepthDepth-First Search Search] ] Es necesario llevar la cuenta de los nodos visitados (y no visitados). El recorrido no es nico: depende del vrtice inicial y del orden de visita de los vrtices adyacentes. El orden de visita de unos nodos puede interpretarse como un rbol: rbol de expansin en profundidad asociado al grafo.
18

Recorridos sobre grafos


Bsqueda primero en profundidad [DFS: DepthDepth-First Search Search] ]
funcin DFS (Grafo G(V,E)) { for (i=0; i< i<V.length V.length; ; i++) visitado[i] = false; for (i=0; i< i<V.length V.length; ; i++) if (!visitado[i]) DFS(G,i DFS( G,i); ); }

19

Recorridos sobre grafos


Bsqueda primero en profundidad [DFS: DepthDepth-First Search Search] ]
funcin DFS (Grafo G(V,E), int i) { visitado[i] = true; foreach (v[j] adyacente a v[i]) if (!visitado[j]) DFS(G,j DFS( G,j); ); }

O(|V|+|E|)
si usamos la representacin basada en listas de adyacencia.
20

Recorridos sobre grafos


Bsqueda primero en anchura [BFS: BreadthBreadth-First Search Search] ]
s L1 L2 L n-1

Exploracin desde s por niveles:


L0 = { s }. L1 = Nodos adyacentes a L0. L2 = Nodos adyacentes a L1 que no pertenecen ni a L0 ni a L1. Li+1 = Nodos que que, , sin pertenecer a ningn nivel anterior, estn conectados con Li a travs de una arista. arista.

Teorema: Teorema: Li contiene todos los nodos que estn a distancia i de s.

21

Recorridos sobre grafos


Bsqueda primero en anchura [BFS: BreadthBreadth-First Search Search] ]
r v
s

t x

u y

Cola Q={s}

r v

t x

u y

Cola Q={r,w Q={r,w} }


r

r v

t x

u y

Cola Q={w,v Q={w,v} }


r v

w
22

Recorridos sobre grafos


Bsqueda primero en anchura [BFS: BreadthBreadth-First Search Search] ]
r v
s

t x

u y

Cola Q={v,t,x Q={v,t,x} }


r v

w t u x

r v

t x

u y

Cola Q={t,x Q={t,x} }

r v

t x

u y

Cola Q={x,u Q={x,u} }


23

Recorridos sobre grafos


Bsqueda primero en anchura [BFS: BreadthBreadth-First Search Search] ]
r v
s

t x

u y

Cola Q={u,y Q={u,y} }


r v

w t u x y

r v

t x

u y

Cola Q={y}

r v

t x

u y

Cola Q={}
24

Recorridos sobre grafos


Bsqueda primero en anchura [BFS: BreadthBreadth-First Search Search] ] Empezando en un nodo v: Primero se visita v. Luego se visitan todos sus vrtices adyacentes. A continuacin, los adyacentes a stos y as sucesivamente. El algoritmo utiliza una cola de vrtices.
25

Recorridos sobre grafos


Bsqueda primero en anchura [BFS: BreadthBreadth-First Search Search] ]
funcin BFS (Grafo G(V,E)) { for (i=0; i<V.length i<V.length; ; i++) visitado[i] = false; for (i=0; i< i<V.length V.length; ; i++) if (!visitado[i]) BFS(G,i BFS( G,i); ); }

26

Recorridos sobre grafos


Bsqueda primero en anchura [BFS: BreadthBreadth-First Search Search] ]
funcin BFS (Grafo G(V,E), int v) { Cola Q; visitado[v]=true; Q.add(v); while (! (!Q.empty Q.empty()) ()) { x = Q.extract Q.extract(); (); foreach (v[y] adyacente a v[x]) if (!visitado[y]) { visitado[y]=true; Q.add(y); } } }

O(|V|+|E|)
si usamos la representacin basada en listas de adyacencia

27

Recorridos sobre grafos


Aplicaciones de los recorridos sobre grafos Comprobar si un grafo es bipartito: Un grafo no dirigido G=(V,A) es bipartito si sus vrtices se pueden separar en dos conjuntos disjuntos V1 y V2 (V=V1V2, V1V2 =) de tal forma que todas las aristas de G unen vrtices de un conjunto con vrtices de otro. Deteccin de las componentes fuertemente conexas de un grafo: Una componente fuertemente conexa de un grafo G=(V,A) es el mximo conjunto de vrtices U V tal que para cada par de vrtices u, v U, existen caminos en G desde u hasta v y viceversa.
28

Recorridos sobre grafos


Aplicaciones de los recorridos sobre grafos Flood fill fill (coloreado por inundacin)

29