Вы находитесь на странице: 1из 22

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA

FACULTAD DE INGENIERÍA DE MINAS, GEOLOGÍA Y CIVIL

ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERÍA DE SISTEMAS

CLASE MODELO
TEMA: ESTRUCTURAS DINÁMICAS NO LINEALES
GRAFOS.
ING. HUBNER JANAMPA PATILLA
AYACUCHO - PERÚ
2017

1
Objetivos de aprendizaje:
1.- Manejar conceptualmente y gráficamente las estructuras no lineales
mediante la implementación de grafos.
2.- Definir la matriz de adyacencia para las estructuras no lineales y su
forma de conceptualizarlo gráficamente a través de los grafos.
3.- Definir la implementación de los grafos mediante un lenguaje de
programación de alto nivel.
4.- Comprender los mecanismos de recorridos y búsquedas recursivas
en las estructuras no lineales.

2
1.- Introducción.
Los grafos son útiles para modelar y resolver problemas del mundo real.
Por ejemplo, el problema para encontrar que el menor número de
vuelos entre dos ciudades se puede modelar usando un grafo, donde
los vértices representan ciudades y los aristas representan los vuelos
entre dos ciudades adyacentes, como se muestra en la figura 1.

Fig. 1 : Grafo para modelar los vuelos entre las ciudades.


3
El problema de encontrar el número mínimo de vuelos de
conexión entre dos ciudades, esto se reduce a encontrar un camino
más corto entre dos vértices en un grafo.

Fig. 1 : Grafo para modelar los vuelos entre las ciudades.

4
El estudio de los problemas de grafos se conoce como teoría de grafos.
La teoría de grafos fue fundada por Leonhard Euler en 1736, cuando introdujo
la terminología gráfica para resolver el famoso problema de los Siete Puentes
de Königsberg.

Fig. 2 : Siete puentes que conectan islas y la tierra.

5
La ciudad de Königsberg, Prusia (ahora Kaliningrad, Rusia), fue dividida
por el río Pregel. Había dos islas en el río. La ciudad y las islas estaban
conectadas por siete puentes, como se muestra en la Figura 2. La
pregunta es, ¿se puede caminar, cruzar cada puente exactamente una
vez y regresar al punto de partida? Euler demostró que no es posible.

Fig. 2 : Siete puentes que conectan islas y la ciudad.

6
2. Terminología básica de grafos.

Un grafo consiste en vértices y aristas que conectan los vértices.


Un grafo consiste en un conjunto no vacío de vértices (también
conocidos como nodos o puntos) y un conjunto de aristas que
conectan los vértices (Deitel, 2015).

Para mayor comodidad, definimos un grafo como G = (V, E), donde V


representa un conjunto de vértices y E representa un conjunto de aristas.

7
Por ejemplo los ,V y E para el gráfico de la figura 3 son los siguientes:

Fig. 3. Grafo con vértices y aristas

8
Un grafo puede ser dirigido o no dirigido. En un grafo dirigido, cada arista tiene
una dirección, lo que indica que puede moverse de un vértice al otro a través de la
arista. Puede modelar las relaciones padre / hijo usando un grafo dirigido. La figura 4
muestra un gráfico dirigido.

Fig. 4: Los grafos en muchas formas


9
3. Representando Grafos
Representar un grafo es almacenar sus vértices y aristas en un
programa. La estructura de datos para almacenar un grafo son las
matrices o listas.

10
Los vértices pueden ser objetos de cualquier tipo. Por ejemplo, puede
considerar ciudades como objetos que contienen información, como el
nombre, población y alcalde. Por lo tanto, puedes definir vértices de la
siguiente manera:

Figura Nº 5 : Representación de
una clase en Java para un grafo.

11
Figura Nº 5 : Representación de
una clase en Java para un grafo.

12
Los vértices se pueden etiquetar convenientemente usando los números
naturales 0, 1, 2, … , n - 1, para un grafo para n vértices.

Figura Nº 6 : Representación de
un grafo y su matriz.

13
4. Representando las aristas mediante listas de adyacencia.

Fig. 7. Las aristas en el grafo y su representación utilizando listas de vértices de adyacencia.

14
Fig. 8 Los vértices del grafo
representado mediante una
lista de aristas de adyacencia.

15
Según Liang (2015), usar matrices como listas es más eficiente para nuestros
algoritmos cuando implementamos grafos.
Utilizando listas de arreglos definimos la lista de aristas de adyacencia, que se puede
construir de la siguiente manera (Fig. 9):

Fig. 9 : Lista de aristas de adyacencia, utilizando


una lista de arreglos.

16
5. Algoritmo de búsqueda de profundidad primero.
(Depth-First Search Algorithm)
• La primera visita es 0, y luego cualquiera de sus vecinos, digamos 1.
• Ahora se visita 1, como se muestra en la figura 10. El vértice 1 tiene
tres vecinos: 0, 2 y 4. Como ya se ha visitado 0, visitará 2 o 4.
• Como se han visitado todos los vecinos de 1, retroceda a 0. Como
se han visitado todos los vecinos de 0, la búsqueda finaliza.
• Como cada arista y cada vértice se visitan solo una vez, la
complejidad de tiempo del método es O (| E | + | V |), donde | E |
denota el número de aristas y | V | el número de vértices.

17
Fig. 10 : La búsqueda recursiva en profundidad para
la visita de un nodo y sus vecinos, los vértices son
visitados en el orden: 0, 1, 2, 3, 2, 1, 4.

18
6. Implementación mediante clases.

Fig. 11 : Diagramas de clases para la implentación de los grafos utilizando


interfaces, clases abstractas y clases concretas (Liang, 2015).

19
Fig. 12 : La interfaz Graph define las
operaciones comunes para todos los
tipos de grafos.

20
Bibliografía.
I. Liang, D.(2015). Introduction to Java Programming :(Tenth Edition)
EEUU: Pearson.
II. Horton, I. (2005). Beginning Java™ 2, JDK™ 5 Edition : (First Edition)
EEUU: Wrox.
III. Deitel, P. (2015). Java™ For Programmers: (Second Edition) EEUU:
Deitel Developer Series.

21
Gracias….

22

Вам также может понравиться