Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Exploración de grafos
Grafos
Recorridos sobre grafos
Búsqueda primero en profundidad
Búsqueda primero en anchura
Backtracking (“vuelta atrás”)
Descripción general
Espacio de soluciones
Implementación
Ejemplos
Branch & Bound (“ramificación y poda”)
Descripción general
Estrategias de ramificación
Implementación 1
Ejemplos
Grafos
Grafo G = (V,E)
V: Conjunto de vértices 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)) v w
Grafos dirigidos
dirigidos:: Arcos (con dirección).
(v,w)
v,w) ≠ (w,v)
w,v) v w
2
Grafos
Ejemplo: US Biotech Industry
3
Grafos - Definiciones
Grafos no dirigidos
Grado de un vértice:
Número de aristas que lo contienen.
Grafos dirigidos
Grafos - Definiciones
Nodos/vértices adyacentes:
adyacentes:
Vértices conectados por una arista (o un arco).
v w
Aristas/arcos adyacentes:
adyacentes:
Arcos/aristas con un vértice común.
u v w
v 5
Grafos - Definiciones
Camino [path]:
path]:
Sucesión de arcos adyacentes tal que el vértice final de
cada arco coincide con el inicial del siguiente.
Circuito (o ciclo):
Camino que empieza y acaba en el mismo vértice. 6
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.
7
Grafos - Definiciones
Tipos de grafos
Grafo etiquetado:
etiquetado:
Cada arista y/o vértice tiene asociada una etiqueta/valor.
Multigrafo:
Multigrafo:
Grafo en el que se permite que entre dos vértices
exista más 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 n-
n-1 aristas.
9
Grafos - Representación
Representación 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
Grafos - Representación
Representación 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 - Representación
Representación mediante listas de adyacencia
1 2 3
2 1 3 4 5
3 1 2 5 7 8
4 2 5
5 2 3 4 6
6 5
7 3 8
8 3 7
12
Grafos - Representación
Representación mediante listas de adyacencia
Ventajas:
Espacio proporcional a |V|+|E|.
(representación 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
(solución: usar estructuras de listas múltiples).
13
Recorridos sobre grafos
Tipos de recorridos:
r s t u Pila S={} s
v w x y
r s t u Pila S={s} s
v w x y r w
r s t u Pila S={r,s
S={r,s}} s
v w x y r w
15
v
Recorridos sobre grafos
Búsqueda primero en profundidad
[DFS: Depth-
Depth-First Search
Search]]
r s t u Pila S={v,r,s
S={v,r,s}} s
v w x y r w
v t x
r s t u Pila S={w,s
S={w,s}} u x
v w x y
r s t u Pila S={t,w,s
S={t,w,s}}
v w x y
16
r s t u Pila S={u,t,w,s
S={u,t,w,s}} s
v w x y r w
v t x
r s t u Pila S={y,u,t,w,s
S={y,u,t,w,s}} u x
v w x y
y x
x
r s t u Pila S={
S={x,y,u,t,w,s}
x,y,u,t,w,s}
v w x y
17
Recorridos sobre grafos
Búsqueda primero en profundidad
[DFS: Depth-
Depth-First Search
Search]]
El recorrido no es único:
único: depende del vértice inicial y
del orden de visita de los vértices adyacentes.
19
Recorridos sobre grafos
Búsqueda primero en profundidad
[DFS: Depth-
Depth-First Search
Search]]
O(|V|+|E|)
si usamos la representación basada en listas de adyacencia. 20
Teorema:
Teorema:
21
Li contiene todos los nodos que están a distancia i de s.
Recorridos sobre grafos
Búsqueda primero en anchura
[BFS: Breadth-
Breadth-First Search
Search]]
r s t u Cola Q={s} s
v w x y
r s t u Cola Q={r,w
Q={r,w}} s
v w x y r w
r s t u Cola Q={w,v
Q={w,v}} s
v w x y r w
22
v
r s t u Cola Q={v,t,x
Q={v,t,x}} s
v w x y r w
v t x
r s t u Cola Q={t,x
Q={t,x}} u
v w x y
r s t u Cola Q={x,u
Q={x,u}}
v w x y
23
Recorridos sobre grafos
Búsqueda primero en anchura
[BFS: Breadth-
Breadth-First Search
Search]]
r s t u Cola Q={u,y
Q={u,y}} s
v w x y r w
v t x
r s t u Cola Q={y} u y
v w x y
r s t u Cola Q={}
v w x y
24
Empezando en un nodo v:
Primero se visita v.
Luego se visitan todos sus vértices adyacentes.
A continuación, los adyacentes a éstos…
y así sucesivamente.
25
Recorridos sobre grafos
Búsqueda primero en anchura
[BFS: Breadth-
Breadth-First Search
Search]]
26
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
“Flood fill
fill”” (coloreado por inundación)
29