Sie sind auf Seite 1von 12

Estructuras de Datos 2016

GRAFOS (parte 1)

2 Introduccin
Los grafos sirven
para representar
relaciones
arbitrarias (no
necesariamente
jerrquicas)
entre objetos de

1
Grafos datos

Introduccin a la teora de grafos

M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

3 Aplicaciones 4 Ejemplo de uso de Grafos


En una red de carreteras las poblaciones representan
Circuitos electrnicos los vrtices del grafo y las carreteras de unin de dos
Tarjetas impresas poblaciones, los arcos, de modo que a cada arco se
Circuitos integrados asocia informacin tal como la distancia entre dos
Redes de transporte ciudades, el consumo de gasolina por automvil, etc.
Autopistas
Teziutlan
Vuelos
Redes de ordenadores Atlixco 3 Chignahuapan
LANs
Internet
Web Puebla 2
Planeacin (rutas crticas)
Planificacin de las 1
tareas que completan 2.5
un proyecto 2
Redes sociales Tehuacn
Zacapoaxtla Zacatln
5
M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 1


Estructuras de Datos 2016
GRAFOS (parte 1)

5 Definiciones 6 Definiciones
Un grafo no dirigido es aquel que los arcos
Un grafo consiste en un conjunto de vrtices o estn formados por pares de nodos no
nodos (V) y un conjunto de arcos o aristas (A).
ordenados, se representa u v.
Un grafo se representa con el par G = (V,A).
Si (u,v) es una arista en el conjunto de aristas
El nmero de elementos de V se llama orden del grafo A(G), entonces u y v se dice que
del grafo son vrtices adyacentes.
Un grafo nulo es un grafo de orden cero Es decir, dos vrtices son adyacentes si hay un
Un arco o arista est formado por un par de arco que los une.
nodos u y v, y se representa por (u,v) Un arco tiene, a veces, asociado un factor
Un grafo es dirigido (o digrafo) si los pares de de peso, en cuyo caso se dice que es un
nodos que forman los arcos son ordenados y se grafo valorado o ponderado.
representan u v.

M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

7 Fundamentos: grafos dirigidos 8 Fundamentos


Grafo no dirigido Grafo dirigido Grado de un vrtice (o nodo)
V(G1) = {a,b,c,d} V(G2) = {1,3,5,7,9} En un grafo no dirigido
A(G1) = {(a,b),(a,d),(b,c),(b,d)} A(G2) = {(1,3),(3,1),(9,1), Grado de un nodo u = n de aristas que contienen a u
(3,5),(5,7)}
Adyacentes a a: b, d En un grafo dirigido
Adyacentes a 1: 3
Adyacentes a b: a, c, d Grado de entrada de u = n de arcos que llegan a u
Adyacentes a 3: 1, 5
Grado de salida de u = n de arcos que salen de u
3
b 9 3 Grado entrada/salida para:
5 9 3?
d 5
9?
1 1?
a 1 5?
7
c
M.C. Yal Galicia Hdez. (FCC/BUAP) 7
M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 2


Estructuras de Datos 2016
GRAFOS (parte 1)

9 Fundamentos 10 Fundamentos
Grafos conexos Grafos Completos
Un grafo no dirigido es conexo si existe un camino entre Un grafo completo es aquel en que cada vrtice est
cualquier par de nodos que forman el grafo conectado con todos y cada uno de los restantes
nodos.
Ejemplos:
Si existen n vrtices, habr (n-1) aristas en un grafo
completo y dirigido, y n(n-1)/2 aristas en un grafo no
dirigido completo.
grafo no conexo con dos
grafo conexo Ejemplos:
componentes conexas
Grafos fuertemente conexos
Un grafo dirigido es fuertemente conexo si existe
un camino entre cualquier par de nodos que
forman el grafo
Ejemplos: Grafo completo no dirigido
M.C. Yal Galicia Hdez. (FCC/BUAP)
Grafo completo dirigido
M.C. Yal Galicia Hdez. (FCC/BUAP)

11 Un grafo con V vrtices tiene a 12 Fundamentos: camino


lo ms V (V 1)/2 aristas
Un camino P de longitud n
en el grafo G desde u0 a un
Prueba: El total de V2 posible pares de es la secuencia de n+1 V
vrtices incluyen los vrtices con bucles vrtices P = (u0, u1, ..., un) tal a b
que (ui,ui+1) son arcos de G P1
y cuentan doble para cada par de d
para 0 i n U X Z
vrtice distinto, entonces el nmero de P2 h
aristas es a lo ms Un camino es simple si todos c
los nodos que forman el e
( V2 V )/2 = V (V 1)/2. camino son distintos, W g
pudiendo ser iguales los
extremos del camino f
Y
Ejemplo:
P1 es simple

M.C. Yal Galicia Hdez. (FCC/BUAP)


P2 no es simple
M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 3


Estructuras de Datos 2016
GRAFOS (parte 1)

13 Fundamentos: ciclos y Actividad Individual


14

bucles Obtener todos los


Un ciclo es un camino simple
cerrado con u0=un, V caminos de vrtice 1 al 4
a b y del 4 a cualquier otro
compuesto al menos por tres
vrtice
nodos
U d X Z Determinar cual de ellos 3
Un ciclo es simple si todos sus C2 h
e es simple
vrtices y arcos son distintos c C1 2
W Hay cliclos? Cual?
Un arco que va desde un g
Se trata de un grafo
vrtice a s mismo (u,u) se 1
f conexo?
6
denomina bucle o lazo Y
5
Ejemplo
C1 es un ciclo simple 4
C2 es un ciclo no simple
M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

TAD GRAFO: Operaciones


15 TAD GRAFO 16

Creacin del grafo crearGrafo (grafo)


Composicin:
<grafo> :: = {<vertice>} + {<arista>} Insercin de vrtices insertarVertice(grafo, vertice)
<vertice> ::= <<refVertice>> + [<<info>>]
Eliminacin de vrtices borrarVertice(grafo,
<arista> ::= <<refVertice>> + <<refVertice>> referenciaVertice)
Inclusin de aristas insertarArista(grafo, vertice1,
<grafoEtiquetado> :: = {<vertice>} + vertice2)
{<aristaEtiquetada>}
Borrar aristas borrarArista(grafo,arista)
<vertice> ::= <<refVertice>> + [<<info>>]
<aristaEtiquetada> ::= <<refVertice>> + Recorrido del grafo recorrer(grafo,tipoRecorrido)
<<refVertice>> + <<etiqueta>>

M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 4


Estructuras de Datos 2016
GRAFOS (parte 1)

TAD GRAFO: Operaciones


18 Representacin de GRAFOS
Acceso a los vertices info(referenciaVertice) Informacion Matriz de adyacencias
grado(referenciaVertice) Entero
gradoEntrante(referenciaVertice) Entero Sea G = (V,A) un grafo de n nodos, suponemos que
gradoSaliente(referenciaVertice) Entero los nodos V = {u1,...,un} estn ordenados y podemos
adyacentes(referenciaVertice) {referenciaVertice} representarlos por sus ordinales {1,2,...,n}.
incidentes{referenciaVertice) {referenciaVertice} La representacin de los arcos se hace con una
esAdyacente(refenciaVertice1, referenciaVertice2) Boolean matriz A de nxn elementos aij definida:

Modificacin de vertices asignarInfo(referenciaVertice, valorInformacion) 1 si hay arco (ui,uj)


aij
vertices(referenciaArista) (refVertice, refVertice) 0 si no hay arco (ui,uj)
Acceso a las aristas
destino(referenciaArista) refVertice
origen(referenciaArista) refVertice
etiqueta((referenciaArista) etiqueta En resumen, la matriz de adyacencia a es un arreglo
de dos dimensiones que representa las conexiones
entre pares de vrtices.
Modificacin de aristas asignarEtiqueta(referenciaArista, valorEtiqueta) M.C. Yal Galicia Hdez. (FCC/BUAP)

Actividad Individual
19 Representacin: matriz de 20

adyacencia 3 2 Obtn la matriz de adyacencia para el siguiente


3 grafo.
1 1 2
1 5
5 1 6
4
2 1 a
2 f
2 4
4 b
3 e
0 1 0 0 0 0 1 1 1 0 1 0 0 0
0 0 1 0 0 1 0 0 1 0 0 2 0 0
0 1 0 0 1 1 0 0 0 0 6 0 0 2
0 0 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 1 0
c d
M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 5


Estructuras de Datos 2016
GRAFOS (parte 1)

Grafo
-M[][]: int ListaLigada
Actividad
21 individual -vertices:
22 ListaLigada -inicio: Nodo
+Grafo() +ListaLigada()
+Grafo(n: int)
Deducir la matriz de adyacencia para el +insertar(v: Vertice): boolean
+agregarVertice(v: String): boolean +eliminar(v: Vertice): boolean
siguiente grafo con aristas ponderadas. +eliminarVertice(v: String) ): +eliminar(index: int): boolean
boolean +mostrar(): void
+agregarArista(vo: String, vd: String)
8 3 +eliminarArista(vo: String, vd: String)
1 2 +mostrarMatriz(): void
15 7 34 11 +mostrarVertices(): void
5
+getOrden(): int
12 98 Vertice
10 6 +getGrado(vertice: String): int
4 5 -nombre: String
8 -index: int
15 74
20 2 Nodo +Vertice(nombre: string)
7 +Vertice(nombre: string, index)
vertice: Vertice
7 9 sgte: Nodo +getIndex(nombre: string): int
8 +getNombre(): String
+Nodo()
M.C. Yal Galicia Hdez. (FCC/BUAP) +Nodo(v: M.C.
vertice)
Yal Galicia Hdez. (FCC/BUAP)

23 Representacin 24 Representacin: listas de


Matriz de adyacencia
adyacencia
Poco eficiente si el n de vrtices vara a lo largo 1 3 4
del tiempo de vida del grafo Ejemplo
Puede darse el caso de que el n de vrtices sea 3
mayor del previsto inicialmente 2 3
Poco eficiente cuando el grafo tiene pocos arcos
(la matriz es dispersa) 2
3 1
Listas de adyacencia
Representar una lista de todos los vrtices 1
Cada vrtice guarda una lista de adyacencia con 4
un objeto arista para cada vrtice alcanzable 5
desde l
5 1 2 4
4
M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 6


Estructuras de Datos 2016
GRAFOS (parte 1)

25 Representacin: listas de Actividad


26 Individual
adyacencia Obtener la lista de adyacencia para el
siguiente grafo.
1 3 2
Ejemplo
3 7 2 3 7 a h
2 2 i
5 3 g
b
1 2
4 1 1
1 5 c d f
5 3 5 2 2 4 3
4 3 j
M.C. Yal Galicia Hdez. (FCC/BUAP) e
M.C. Yal Galicia Hdez. (FCC/BUAP)

Actividad individual
27 28 Que hemos aprendido?
Obtener la lista de adyacencia para el siguiente
grafo con aristas ponderadas.

8 2
1
15 7 12
5
4 6
5

15
7
20
2
7
8

M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 7


Estructuras de Datos 2016
GRAFOS (parte 1)

30 Recorridos en Grafos
Muchas de las aplicaciones computacionales
naturalmente incluyen no solo un conjunto de
elementos sino un conjunto de conexiones

Algoritmos de entre pares de esos elementos


Las relaciones implicadas por esas conexiones

bsqueda o guan inmediatamente a un conjunto de


preguntas:

recorridos en grafos
Hay alguna manera de ir de un elemento a otro
siguiendo las conexiones?
29 Cuntos otros elementos pueden ser alcanzados
Profundidad y anchura desde un elemento dado?
Cual es la mejor manera de ir desde un
elemento a otro?

M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

31 Algoritmos de bsqueda o 32 Recorridos: operaciones


recorridos en grafos auxiliares
Marcar vrtice como visitado
Recorrer un grafo consiste en pasar Si los vrtices estn identificados por algn tipo
exactamente una vez por cada uno de los ordinal, emplear un conjunto que contenga los
identificadores de los vrtices visitados
vrtices del grafo en busca de algn vrtice
en particular. Encontrar los vrtices adyacentes
Con matrices de adyacencia: recorrer la fila
Existen varias formas de realizar este proceso correspondiente al vrtice, buscando columnas igual
dependiendo del objetivo particular: a1
Recorrido o bsqueda primero en profundidad Con listas de adyacencia: recorrer la lista
DFS (Depth-First Search) Estructuras auxiliares
Recorrido o bsqueda primero en achura BFS TDA Pila en Profundidad
(Breadth-First Search) TDA Cola en Anchura

M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 8


Estructuras de Datos 2016
GRAFOS (parte 1)

Recorrido primero en
33 Recorridos
profundidad
2
Primero en profundidad (DFS: Depth First 6 3
1 3
Search) 10
1 7
Visitar vrtice inicial vi 10 4
Visitar vrtice adyacente a vi
4
... proceder as hasta encontrar uno ya visitado... 11 12 11
9 13
13
Volver atrs hasta llegar a un vrtice con 8
adyacentes sin visitar 5
El recorrido termina cuando volviendo atrs 2 8
5
7
llegamos al vrtice inicial vi y no quedan 6 12
adyacentes por recorrer 9

M.C. Yal Galicia Hdez. (FCC/BUAP)


1, 3, 6, 10, 13, 12, 9, 5, 2, 4, 7, 8, 11

Actividad Individual
Recorrido primero en
profundidad Obtener la matriz de adyacencia y el recorrido DFS del
siguiente grafo. Inicia en el nodo a
1 2 3 4 5 6 7 8 9 10 11 12 13
1
1 0 1 1 1 0 0 0 0 0 0 0 0 0 2
2 1 0 0 1 1 0 0 0 0 0 0 0 0 4
3 1 0 0 1 0 1 1 0 0 0 0 0 0 a h
4 1 1 1 0 0 1 1 1 0 0 0 0 0
3
5 0 1 0 0 0 0 0 1 1 0 0 0 0 6 i
6 0 0 1 1 0 0 0 0 0 1 0 0 0 10 g
7 0 0 1 1 0 0 0 0 0 1 0 0 0 7 b
8 0 0 0 1 1 0 0 0 0 0 1 0 0 11
9 0 0 0 0 1 0 0 0 0 0 1 1 0
10 0 0 0 0 0 1 1 0 0 0 1 0 1
8 c
5 d f
11 0 0 0 0 0 0 0 1 1 1 0 0 1
12 0 0 0 0 0 0 0 0 1 0 0 0 1 9 j
13 0 0 0 0 0 0 0 0 0 1 1 1 0 12 e
13
M.C. Yal Galicia Hdez. (FCC/BUAP)
35

M.C. Yal Galicia Hernndez (FCC/BUAP) 9


Estructuras de Datos 2016
GRAFOS (parte 1)

37 Recorrido primero en 38 Actividad colaborativa


profundidad
Solucin En binas escribir el algoritmo Primero en
a b c d e f g h i j profundidad (DFS: Depth First Search)
a 0 1 0 0 0 0 1 0 0 0 a Tip: Pensar recursivamente
b 0 0 1 1 0 0 0 0 0 0 b
c 1 0 0 0 1 0 0 0 0 0 c
d 0 0 0 0 1 1 0 0 0 0
e 0 0 0 0 0 0 0 0 0 0 e
f 0 0 0 0 0 0 1 0 0 1 d
g 0 0 0 0 0 0 0 1 0 0 f
h 0 0 0 0 0 0 0 0 1 0 g
i 0 0 0 0 0 1 0 0 0 1 h
j 0 0 0 0 0 0 0 0 0 0
i
M.C. Yal Galicia Hdez. (FCC/BUAP)
j M.C. Yal Galicia Hdez. (FCC/BUAP)

39 Recorridos 40 Recorridos: Anchura


Primero en anchura (BFS: Breadth First Inicio
Search) marcar vi como visitado
meter vi en cola Q
Visitar vrtice inicial vi mientras cola Q no vaca hacer
Visitar todos los vrtices adyacentes a vi sacar v de cola Q
para cada vk adyacente a v hacer
Al terminar, comenzar a visitar los adyacentes a si vk no visitado entonces
los adyacentes a vi marcar vk visitado
... proceder as hasta que no queden vrtices por meter vk en cola Q
visitar fin_si
fin_para
fin_mientras
Fin

M.C. Yal Galicia Hdez. (FCC/BUAP) M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 10


Estructuras de Datos 2016
GRAFOS (parte 1)

Recorrido primero en 42 Recorrido primero en


anchura anchura
1 2 3 4 5 6 7 8 9 10 11 12 13 1
4
6 8 1 0 1 1 1 0 0 0 0 0 0 0 0 0 2
1 3 5 2 1 0 0 1 1 0 0 0 0 0 0 0 0 3
10
1 2 7 3 1 0 0 1 0 1 1 0 0 0 0 0 0 4
11 4 1 1 1 0 0 1 1 1 0 0 0 0 0
5
5 0 1 0 0 0 0 0 1 1 0 0 0 0
4 6 0 0 1 1 0 0 0 0 0 1 0 0 0 6
3 6 9 11
13 7 0 0 1 1 0 0 0 0 0 1 0 0 0 7
8 8 0 0 0 1 1 0 0 0 0 0 1 0 0 8
9 0 0 0 0 1 0 0 0 0 0 1 1 0 9
2 7
5 10 0 0 0 0 0 1 1 0 0 0 1 0 1
10 10
12 12 11 0 0 0 0 0 0 0 1 1 1 0 0 1
9 12 0 0 0 0 0 0 0 0 1 0 0 0 1 11
13 0 0 0 0 0 0 0 0 0 1 1 1 0 12
1, 3, 4, 2, 6, 7, 8, 5, 10, 11, 9, 13, 12 M.C. Yal Galicia Hdez. (FCC/BUAP) 13

Actividad colaborativa
En binas obtener la matriz de adyacencia y el
44 Actividad colaborativa
recorrido del grafo en anchura
En equipos de 4, suponiendo que se cuenta con la
clase Grafo como se muestra.
Implementar los recorridos en profundidad y
anchura
a h
Vertice
Grafo
i -nombre: String
g -M[][]: int -index: int
b -V[]: vertice -visitado: boolean
+Grafo()
+Grafo(n: int) +Vertice(nombre: string)
c d f +agregarVertice(v: String) +Vertice(nombre: string,
+agregarArista(vo: String, vd: index)
String) +getIndex(nombre: string): int
j +verMatriz() +setVisitado(s: boolean)
e +BFS(vi: String) //anchura
M.C. Yal Galicia Hdez. (FCC/BUAP)
+isVisitado(): boolean
+DFS(vi: String) //profundidad

M.C. Yal Galicia Hernndez (FCC/BUAP) 11


Estructuras de Datos 2016
GRAFOS (parte 1)

45 Que hemos aprendido?

M.C. Yal Galicia Hdez. (FCC/BUAP)

M.C. Yal Galicia Hernndez (FCC/BUAP) 12

Das könnte Ihnen auch gefallen