grafos apuntes java java java, Diapositivas de Programación Java
jesus_c._martinez
jesus_c._martinez

grafos apuntes java java java, Diapositivas de Programación Java

PDF (1 MB)
12 páginas
10Número de descargas
412Número de visitas
100%de 4 votosNúmero de votos
Descripción
dsaddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
20 Puntos
Puntos necesarios para descargar
este documento
Descarga el documento
Vista previa3 páginas / 12
Esta solo es una vista previa
3 páginas mostradas de 12 páginas totales
Descarga el documento
Esta solo es una vista previa
3 páginas mostradas de 12 páginas totales
Descarga el documento
Esta solo es una vista previa
3 páginas mostradas de 12 páginas totales
Descarga el documento
Esta solo es una vista previa
3 páginas mostradas de 12 páginas totales
Descarga el documento
Grafos

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 1

Grafos Introducción a la teoría de grafos

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

1

Introducción

 Los grafos sirven para representar relaciones

arbitrarias (no necesariamente jerárquicas) entre objetos de datos

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

2

Aplicaciones

 Circuitos electrónicos

 Tarjetas impresas

 Circuitos integrados

 Redes de transporte

 Autopistas  Vuelos

 Redes de ordenadores

 LANs

 Internet

 Web

 Planeación (rutas críticas)

 Planificación de las

tareas que completan

un proyecto

 Redes sociales

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

3 Ejemplo de uso de Grafos

 En una red de carreteras las poblaciones representan los vértices del grafo y las carreteras de unión de dos poblaciones, los arcos, de modo que a cada arco se asocia información tal como la distancia entre dos ciudades, el consumo de gasolina por automóvil, etc.

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

4

Atlixco

Tehuacán

Puebla

Teziutlan

Chignahuapan

ZacatlánZacapoaxtla

2

2.5

5

3

2

1

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 2

Definiciones

 Un grafo consiste en un conjunto de vértices o nodos (V) y un conjunto de arcos o aristas (A).

 Un grafo se representa con el par G = (V,A).

 El número de elementos de V se llama orden del grafo

 Un grafo nulo es un grafo de orden cero

 Un arco o arista está formado por un par de nodos u y v, y se representa por (u,v)

 Un grafo es dirigido (o digrafo) si los pares de nodos que forman los arcos son ordenados y se representan u  v.

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

5 Definiciones

 Un grafo no dirigido es aquel que los arcos están formados por pares de nodos no ordenados, se representa u  v.

 Si (u,v) es una arista en el conjunto de aristas del grafo A(G), entonces u y v se dice que son vértices adyacentes.

 Es decir, dos vértices son adyacentes si hay un arco que los une.

 Un arco tiene, a veces, asociado un factor de peso, en cuyo caso se dice que es un grafo valorado o ponderado.

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

6

Fundamentos: grafos dirigidos

 Grafo no dirigido

V(G1) = {a,b,c,d}

A(G1) = {(a,b),(a,d),(b,c),(b,d)}

Adyacentes a a: b, d

Adyacentes a b: a, c, d

 Grafo dirigido

V(G2) = {1,3,5,7,9}

A(G2) = {(1,3),(3,1),(9,1),

(3,5),(5,7)}

Adyacentes a 1: 3

Adyacentes a 3: 1, 5

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

7

a

b

d

c

1

3

5

7

9

Fundamentos

Grado de un vértice (o nodo)

 En un grafo no dirigido

Grado de un nodo u = nº de aristas que contienen a u

 En un grafo dirigido

Grado de entrada de u = nº de arcos que llegan a u

Grado de salida de u = nº de arcos que salen de u

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

8

1

3

5

7

9 Grado entrada/salida para: 3? 9? 1? 5?

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 3

Fundamentos

 Grafos conexos

 Un grafo no dirigido es conexo si existe un camino entre cualquier par de nodos que forman el grafo

 Ejemplos:

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

9

grafo conexo grafo no conexo con dos 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:

Fundamentos

 Grafos Completos

 Un grafo completo es aquel en que cada vértice está conectado con todos y cada uno de los restantes nodos.

 Si existen n vértices, habrá (n-1) aristas en un grafo completo y dirigido, y n(n-1)/2 aristas en un grafo no dirigido completo.

 Ejemplos:

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

10

Grafo completo dirigido

Grafo completo no dirigido

Un grafo con V vértices tiene a

lo más V (V – 1)/2 aristas

 Prueba: El total de V2 posible pares de vértices incluyen los vértices con bucles y cuentan doble para cada par de

vértice distinto, entonces el número de aristas es a lo más

( V2 – V )/2 = V (V – 1)/2.

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

11 Fundamentos: camino

 Un camino P de longitud n en el grafo G desde u0 a un es la secuencia de n+1 vértices P = (u0, u1, ..., un) tal que (ui,ui+1) son arcos de G para 0  i  n

 Un camino es simple si todos los nodos que forman el camino son distintos, pudiendo ser iguales los extremos del camino

 Ejemplo:

 P1 es simple

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

12

P1

XU

V

W

Z

Y

a

c

b

e

d

f

g

hP2

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 4

Fundamentos: ciclos y bucles

 Un ciclo es un camino simple cerrado con u0=un,

compuesto al menos por tres nodos

 Un ciclo es simple si todos sus vértices y arcos son distintos

 Un arco que va desde un vértice a sí mismo (u,u) se

denomina bucle o lazo

 Ejemplo

 C1 es un ciclo simple

 C2 es un ciclo no simple M.C. Yalú Galicia Hdez. (FCC/BUAP)

13

C1

XU

V

W

Z

Y

a

c

b

e

d

f

g

hC2

Actividad Individual

 Obtener todos los

caminos de vértice 1 al 4

y del 4 a cualquier otro vértice

 Determinar cual de ellos

es simple

 Hay cliclos? Cual?

 ¿Se trata de un grafo

conexo?

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

14

1

5

2

3

4

6

TAD GRAFO

Composición:

 <grafo> :: = {<vertice>} + {<arista>}

 <vertice> ::= <<refVertice>> + [<<info>>]

 <arista> ::= <<refVertice>> + <<refVertice>>

 <grafoEtiquetado> :: = {<vertice>} +

{<aristaEtiquetada>}

 <vertice> ::= <<refVertice>> + [<<info>>]

 <aristaEtiquetada> ::= <<refVertice>> + <<refVertice>> + <<etiqueta>>

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

15 TAD GRAFO: Operaciones

Creación del grafo crearGrafo (grafo)

Inserción de vértices insertarVertice(grafo, vertice)

Eliminación de vértices borrarVertice(grafo,

referenciaVertice)

Inclusión de aristas insertarArista(grafo, vertice1,

vertice2)

Borrar aristas borrarArista(grafo,arista)

Recorrido del grafo recorrer(grafo,tipoRecorrido)

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

16

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 5

TAD GRAFO: Operaciones

asignarInfo(referenciaVertice, valorInformacion) Modificación de vertices

info(referenciaVertice) Informacion

grado(referenciaVertice) Entero

gradoEntrante(referenciaVertice) Entero

gradoSaliente(referenciaVertice) Entero

adyacentes(referenciaVertice) {referenciaVertice}

incidentes{referenciaVertice) {referenciaVertice}

esAdyacente(refenciaVertice1, referenciaVertice2) Boolean

Acceso a los vertices

asignarEtiqueta(referenciaArista, valorEtiqueta) Modificación de aristas

vertices(referenciaArista) (refVertice, refVertice)

destino(referenciaArista) refVertice

origen(referenciaArista) refVertice

etiqueta((referenciaArista) etiqueta

Acceso a las aristas

Representación de GRAFOS

 Matriz de adyacencias

 Sea G = (V,A) un grafo de n nodos, suponemos que los nodos V = {u1,...,un} están ordenados y podemos representarlos por sus ordinales {1,2,...,n}.

 La representación de los arcos se hace con una matriz A de nxn elementos aij definida:

1 si hay arco (ui,uj)

aij

0 si no hay arco (ui,uj)

 En resumen, la matriz de adyacencia a es un arreglo de dos dimensiones que representa las conexiones entre pares de vértices.

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

18

Representación: matriz de

adyacencia

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

19

2

1

4

3

2

3

5

4

1

0 1 1 1 1 0 0 1 1 0 0 0 1 1 0 0

0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0

2

3

5

4

1

1

2

6

2

1

0 1 0 0 0 0 0 2 0 0 0 6 0 0 2 0 0 0 0 0 0 0 0 1 0

Actividad Individual

 Obtén la matriz de adyacencia para el siguiente

grafo.

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

20

e b

a

c d

f

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 6

Actividad individual

 Deducir la matriz de adyacencia para el siguiente grafo con aristas ponderadas.

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

21

1

4

7

2

8

6

3

5

9

20

15

10

8

34

98

74

12

7

8 15

5 7 11

2

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

22

Grafo

-M[][]: int

-vertices: ListaLigada

+Grafo()

+Grafo(n: int)

+agregarVertice(v: String): boolean

+eliminarVertice(v: String) ):

boolean +agregarArista(vo: String, vd: String)

+eliminarArista(vo: String, vd: String)

+mostrarMatriz(): void

+mostrarVertices(): void

+getOrden(): int

+getGrado(vertice: String): int Vertice

-nombre: String

-index: int

+Vertice(nombre: string)

+Vertice(nombre: string, index)

+getIndex(nombre: string): int

+getNombre(): String

ListaLigada

-inicio: Nodo

+ListaLigada()

+insertar(v: Vertice): boolean

+eliminar(v: Vertice): boolean

+eliminar(index: int): boolean

+mostrar(): void

Nodo

vertice: Vertice

sgte: Nodo

+Nodo()

+Nodo(v: vertice)

Representación

 Matriz de adyacencia

 Poco eficiente si el nº de vértices varía a lo largo del tiempo de vida del grafo

 Puede darse el caso de que el nº de vértices sea mayor del previsto inicialmente

 Poco eficiente cuando el grafo tiene pocos arcos (la matriz es “dispersa”)

 Listas de adyacencia

 Representar una lista de todos los vértices

 Cada vértice guarda una lista de adyacencia con un objeto arista para cada vértice alcanzable desde él

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

23 Representación: listas de

adyacencia

 Ejemplo

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

24

1

3

2

5

4

1

2

5

4

3

3 4

3

1

1 2 4

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 7

Representación: listas de adyacencia

 Ejemplo

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

25

1

3

2

5

4

1

2

5

4

3

3

3

3 2 4

2

5

7

2

3

1

1

2

7

1

5 2 3

Actividad Individual

 Obtener la lista de adyacencia para el

siguiente grafo.

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

26

g b

a

c d

i

e

f

j

h

Actividad individual

 Obtener la lista de adyacencia para el siguiente

grafo con aristas ponderadas.

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

27

1

4

7

2

8

65

20

15

8

12

7 15

5 7

2

¿Que hemos aprendido?

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

28

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 8

Algoritmos de búsqueda o

recorridos en grafos Profundidad y anchura

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

29

Recorridos en Grafos

 Muchas de las aplicaciones computacionales naturalmente incluyen no solo un conjunto de elementos sino un conjunto de conexiones entre pares de esos elementos

 Las relaciones implicadas por esas conexiones guían inmediatamente a un conjunto de preguntas:

 ¿Hay alguna manera de ir de un elemento a otro siguiendo las conexiones?

 ¿Cuántos otros elementos pueden ser alcanzados desde un elemento dado?

 ¿Cual es la mejor manera de ir desde un elemento a otro?

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

30

Algoritmos de búsqueda o

recorridos en grafos

 Recorrer un grafo consiste en pasar exactamente una vez por cada uno de los

vértices del grafo en busca de algún vértice en particular.

 Existen varias formas de realizar este proceso dependiendo del objetivo particular:

 Recorrido o búsqueda primero en profundidad – DFS (Depth-First Search)

 Recorrido o búsqueda primero en achura – BFS (Breadth-First Search)

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

31 Recorridos: operaciones

auxiliares  Marcar vértice como visitado

 Si los vértices están identificados por algún tipo ordinal, emplear un conjunto que contenga los identificadores de los vértices visitados

 Encontrar los vértices adyacentes

 Con matrices de adyacencia: recorrer la fila correspondiente al vértice, buscando columnas igual a 1

 Con listas de adyacencia: recorrer la lista

 Estructuras auxiliares

 TDA Pila en Profundidad

 TDA Cola en Anchura

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

32

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 9

Recorridos

 Primero en profundidad (DFS: Depth First Search)

 Visitar vértice inicial vi

 Visitar vértice adyacente a vi

 ... proceder así hasta encontrar uno ya visitado...

 Volver atrás hasta llegar a un vértice con

adyacentes sin visitar

 El recorrido termina cuando volviendo atrás

llegamos al vértice inicial vi y no quedan adyacentes por recorrer

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

33 Recorrido primero en profundidad

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

133

1

2

3

4

6

7

8

5

10

11

9 12

1

10

2

11

6

8

3

9

7

4

5

12

Recorrido primero en

profundidad

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

0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0

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

1 2 3 4 5 6 7 8 9

10 11 12 13

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

Actividad Individual

 Obtener la matriz de adyacencia y el recorrido DFS del

siguiente grafo. Inicia en el nodo a

g b

a

c d

i

e

f

j

h

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 10

Recorrido primero en profundidad

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

37

0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0

a b c e d f g h i j

a b c d e f g h i j

a b c d e f g h i j

Solución

Actividad colaborativa

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

38

 En binas escribir el algoritmo Primero en profundidad (DFS: Depth First Search)

 Tip: Pensar recursivamente

Recorridos

 Primero en anchura (BFS: Breadth First Search)

 Visitar vértice inicial vi

 Visitar todos los vértices adyacentes a vi

Al terminar, comenzar a visitar los adyacentes a

los adyacentes a vi

 ... proceder así hasta que no queden vértices por visitar

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

39 Recorridos: Anchura

Inicio

marcar vi como visitado

meter vi en cola Q mientras cola Q no vacía hacer

sacar v de cola Q

para cada vk adyacente a v hacer si vk no visitado entonces

marcar vk visitado

meter vk en cola Q fin_si

fin_para

fin_mientras Fin

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

40

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 11

Recorrido primero en anchura

11

1

2

3

4

6

7

8

5

10

9

13

12

1

2

3

4

5

6

7

8

9

10

11

12

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

Recorrido primero en anchura

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

42

0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0

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

1 2 3 4 5 6 7 8 9

10 11 12 13

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

Actividad colaborativa

 En binas obtener la matriz de adyacencia y el

recorrido del grafo en anchura

g b

a

c d

i

e

f

j

h

Actividad colaborativa

 En equipos de 4, suponiendo que se cuenta con la clase Grafo como se muestra.  Implementar los recorridos en profundidad y

anchura

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

44

Grafo

-M[][]: int

-V[]: vertice

+Grafo()

+Grafo(n: int)

+agregarVertice(v: String)

+agregarArista(vo: String, vd:

String) +verMatriz()

+BFS(vi: String) //anchura

+DFS(vi: String) //profundidad

Vertice

-nombre: String

-index: int

-visitado: boolean

+Vertice(nombre: string)

+Vertice(nombre: string,

index)

+getIndex(nombre: string): int

+setVisitado(s: boolean) +isVisitado(): boolean

Estructuras de Datos – 2016

GRAFOS (parte 1)

M.C. Yalú Galicia Hernández (FCC/BUAP) 12

¿Que hemos aprendido?

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

45

No hay comentarios
Esta solo es una vista previa
3 páginas mostradas de 12 páginas totales
Descarga el documento