Está en la página 1de 15

Exploracin de grafos

Anlisis y Diseo de Algoritmos

Exploracin de grafos



Grafos
Recorridos sobre grafos



Backtracking (vuelta atrs)







Bsqueda primero en profundidad


Bsqueda primero en anchura
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
dirigidos: Aristas (no orientadas).
(v,w)
v,w) = (w,v
(w,v))

Grafos dirigidos
dirigidos:: Arcos (con direccin).
(v,w)
v,w) (w,v)
w,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:
adyacentes:
Vrtices conectados por una arista (o un arco).
v

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

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


v

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:
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:
conexas:
Cada uno de los conjuntos
maximales conexos.

Grafos - Definiciones
Tipos de grafos


Grafo etiquetado:
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:
Multigrafo:
Grafo en el que se permite que entre dos vrtices
exista ms de una arista o arco.
8

Grafos - Definiciones


rbol:
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

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

Pila S={}

Pila S={s}

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

w
15

Recorridos sobre grafos


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

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

v
r

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

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

Recorridos sobre grafos


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

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

r
v

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

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

w
t

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:
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

Cola Q={s}

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

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

w
22

Recorridos sobre grafos


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

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

r
v

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

w
t

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

Recorridos sobre grafos


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

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

r
v

Cola Q={y}

w
t

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]]

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

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);
}
}
}

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

También podría gustarte