estructura de datos - unidad 4 estructuras no lineales

42
TECNOLÓGICO NACIONAL DE MÉXICO Ingeniería en Sistemas Computacionales Estructura de Datos Unidad IV: Estructuras no Lineales

Upload: jose-antonio-sandoval-acosta

Post on 13-Apr-2017

73 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Estructura de Datos - Unidad 4 Estructuras no lineales

TECNOLÓGICO NACIONAL DE MÉXICOIngeniería en Sistemas Computacionales

Estructura de DatosUnidad IV: Estructuras no Lineales

Page 2: Estructura de Datos - Unidad 4 Estructuras no lineales

Competencia de la Unidad• Conocer, identificar y aplicar las estructuras no lineales en la solución de

problemas del mundo real.

Page 3: Estructura de Datos - Unidad 4 Estructuras no lineales

Estructuras NO Lineales • A las estructuras de datos no lineales se les llama también estructuras de datos

multi-enlazadas. Cada elemento o NODO puede estar enlazado a cualquier otro componentes.• Se trata de estructuras de datos en las que cada elemento puede tener varios

sucesores y/o varios predecesores.

Page 4: Estructura de Datos - Unidad 4 Estructuras no lineales

Árboles

Page 5: Estructura de Datos - Unidad 4 Estructuras no lineales

ÁrbolesUn árbol es una estructura de datos homogénea, dinámica y no lineal, en la que cada nodo (elemento) puede tener varios nodos posteriores, pero sólo puede tener un nodo anterior.

Un árbol es dinámico porque su estructura puede cambiar durante la ejecución de un programa. Y no lineal, ya que cada nodo del árbol puede contener varios nodos que dependan de él.

Page 6: Estructura de Datos - Unidad 4 Estructuras no lineales

• La estructura de un árbol se forma de nodos y arcos (línea que une dos nodos), el primero de los nodos del árbol recibe el nombre de raíz, del cual se desprenden los nodos interiores y de éstos los nodos llamados hoja, que son los nodos que se encuentran al final del árbol; todos ellos en conjunto forman un árbol.• Además de comprender el concepto y la estructura de un árbol, debemos

tomar en cuenta otros conceptos básicos que pueden ser útiles en el momento de construir o programar un árbol, estos conceptos los clasificaremos en tres rubros:

Relación con otros nodos, Posición dentro del árbol y Tamaño del árbol

Page 7: Estructura de Datos - Unidad 4 Estructuras no lineales

En relación con otros nodos:• Padre: es el nodo del cual se derivan otros nodos.• Hijo: es el nodo que depende de otro.• Hermano: es el nodo que se encuentra al lado del nodo hijo y que dependen

del mismo nodo padre.

En cuanto a la posición dentro del árbol:• Raíz: es el primero de los nodos y el único que no contiene un padre.• Hoja: es el nodo que se encuentra al final del árbol.• Interior: nodos con uno o más subárboles; nodos que no son hojas.

Page 8: Estructura de Datos - Unidad 4 Estructuras no lineales

En relación a su tamaño:

Page 9: Estructura de Datos - Unidad 4 Estructuras no lineales

En relación a su tamaño:

Page 10: Estructura de Datos - Unidad 4 Estructuras no lineales

Un árbol binario sería un conjunto de 0 o más nodos en el cual existe un nodo raíz y cada uno de los nodos, incluido el raíz podrán tener 0, 1 o dos subárboles:

Subárbol izquierdo y subárbol derecho. Cada nodo es como máximo de grado 2.

Page 11: Estructura de Datos - Unidad 4 Estructuras no lineales

Árboles similares: árboles con la misma estructura.

Árboles equivalentes: árboles con la misma estructura y contienen la misma información.

Árboles completos o árboles perfectos: todos los nodos, excepto las hojas, tienen grado 2. Un árbol binario de altura n

tiene 2n-1 nodos.

Árbol equilibrado o balanceado: un árbol en el que las alturas de los dos subárboles de cada uno de los nodos tiene como

máximo una diferencia de una unidad.

Árbol degenerado: todos sus nodos sólo tienen un subárbol.

Terminología:

Page 12: Estructura de Datos - Unidad 4 Estructuras no lineales

• .

Page 13: Estructura de Datos - Unidad 4 Estructuras no lineales

TRABAJANDO CON ÁRBOLES BINARIOS

• Un árbol binario es una estructura recursiva. Cada nodo es el raíz de su propio subárbol y tiene hijos, que son raíces de árboles llamados los subárboles derecho e izquierdo del nodo, respectivamente. Un árbol binario se divide en tres subconjuntos disjuntos:

Page 14: Estructura de Datos - Unidad 4 Estructuras no lineales

RECORRIDO DE UN ÁRBOL BINARIO• Para visualizar o consultar los datos almacenados en un árbol se necesita

recorrer el árbol o visitar los nodos del mismo. Al contrario que las listas enlazadas, los árboles binarios no tienen realmente un primer valor, un segundo valor, tercer valor, etc. Se puede afirmar que el nodo raíz viene el primero, pero ¿quién viene a continuación? Existen diferentes métodos de recorrido de árbol ya que la mayoría de las aplicaciones binarias son bastante sensibles al orden en el que se visitan los nodos, de forma que será preciso elegir cuidadosamente el tipo de recorrido.

Page 15: Estructura de Datos - Unidad 4 Estructuras no lineales

RECORRIDO PREORDENEl recorrido preorden conlleva los siguientes pasos, en los que el nodo raíz va antes que los subárboles:

1. Visitar el nodo raíz (N).2. Recorrer el subárbol izquierdo (I) en preorden.3. Recorrer el subárbol derecho (D) en preorden.

• Dado las características recursivas de los árboles, el algoritmo de recorrido tiene naturaleza recursiva. Primero se procesa la raíz, a continuación el subárbol izquierdo y a continuación el subárbol derecho. • Para procesar el subárbol izquierdo se siguen los mismos pasos: raíz, subárbol

izquierdo y subárbol derecho (proceso recursivo). • Luego se hace lo mismo con el subárbol derecho.

Page 16: Estructura de Datos - Unidad 4 Estructuras no lineales

Si utilizamos el recorrido preorden del árbol de la figura se visita primero el raíz (nodo A); a continuación, se visita el subárbol izquierdo de A, que consta de los nodos B, D y E.

Dado que el subárbol es a su vez un árbol, se visitan los nodos utilizando el mismo preorden. Por consiguiente, se visita primero el nodo B, después D (izquierdo) y por último E (derecho).

A continuación, se visita subárbol derecho de A, que es un árbol que contiene los nodos C, F y G. De nuevo, siguiendo el mismo preorden, se visita primero el nodo C, a continuación F (izquierdo) y por último G (derecho).

Page 17: Estructura de Datos - Unidad 4 Estructuras no lineales

• Ejercicio: Realizar el recorrido en preorden del siguiente árbol binario.

Page 18: Estructura de Datos - Unidad 4 Estructuras no lineales

RECORRIDO ENORDEN

• El recorrido enorden (inorder) procesa primero el subárbol izquierdo, después el raíz y a continuación el subárbol derecho. El significado de en (in) es que la raíz se procesa entre los subárboles.

• Si el árbol no está vacío, el método implica los siguientes pasos:

1. Recorrer el subárbol izquierdo (I) en enorden.2. Visitar el nodo raíz (N).3. Recorrer el subárbol derecho (D) en enorden.

Page 19: Estructura de Datos - Unidad 4 Estructuras no lineales

• En el árbol de la figura ejemplo, los nodos se han numerado en el orden en que son visitados durante el recorrido enorden. • El primer subárbol recorrido es el

subárbol izquierdo del nodo raíz (árbol cuyo nodo contiene la letra B). Este subárbol es, a su vez, otro árbol con el nodo B como raíz, por lo que siguiendo el enorden, se visita primero D, a continuación B (nodo raíz) y por último E (derecha). Después, se visita el nodo raíz, A. • Por último, se visita el subárbol derecho

de A, siguiendo el enorden se visita primero F, después C (nodo raíz) y por último G.

Page 20: Estructura de Datos - Unidad 4 Estructuras no lineales

• Ejercicio: Realizar el recorrido enorden del siguiente árbol binario.

Page 21: Estructura de Datos - Unidad 4 Estructuras no lineales

RECORRIDO POSTORDEN• El recorrido postorden procesa el nodo raíz (post) después de que los

subárboles izquierdo y derecho se han procesado. Se comienza situándose en la hoja más a la izquierda y se procesa. A continuación se procesa su subárbol derecho. Por último, se procesa el nodo raíz.

Las etapas del algoritmo, si el árbol no está vacío, son:

1. Recorrer el subárbol izquierdo (I) en postorden.2. Recorrer el subárbol derecho (D) en postorden.3. Visitar el nodo raíz (N).

Page 22: Estructura de Datos - Unidad 4 Estructuras no lineales

• Si se utiliza el recorrido postorden del árbol ejemplo se visita primero el subárbol izquierdo de A. Este subárbol consta de los nodos B, D y E, y siguiendo el postorden, se visitará primero D (izquierdo), luego E (derecho) y, por último, B (nodo). • A continuación, se visita el subárbol

derecho de A que consta de los nodos C, F y G. Siguiendo el postorden para este árbol, se visita primero F (izquierdo), después G (derecho) y, por último, C (nodo). • Finalmente se visita el nodo raíz A.

Page 23: Estructura de Datos - Unidad 4 Estructuras no lineales

• Ejercicio: Realizar el recorrido postorden del siguiente árbol binario.

Page 24: Estructura de Datos - Unidad 4 Estructuras no lineales

El resultado para los 3 métodos es el siguiente:

Preorden

Postorden

Enorden

Page 25: Estructura de Datos - Unidad 4 Estructuras no lineales

ÁRBOLES DESDE LA PROGRAMACIÓN CON MEMORIA DINÁMICA• Para trabajar un árbol binario desde la programación es necesario crear una

estructura que albergue la información y enlaces de los nodos, esto significa que nuestro árbol se trabajará por medio de memoria dinámica.

Declaración de estructura y variables tipo nodos:

Page 26: Estructura de Datos - Unidad 4 Estructuras no lineales

Lógica del módulo principal:

Page 27: Estructura de Datos - Unidad 4 Estructuras no lineales

Módulo recursivo para insertar nodos en el árbol

Page 28: Estructura de Datos - Unidad 4 Estructuras no lineales

Recorrido Recursivo en PreOrden:

Page 29: Estructura de Datos - Unidad 4 Estructuras no lineales

Recorrido Recursivo en InOrden:

Page 30: Estructura de Datos - Unidad 4 Estructuras no lineales

Recorrido Recursivo en PostOrden:

Page 31: Estructura de Datos - Unidad 4 Estructuras no lineales

Ejercico:

• Enlazar los módulos vistos en clase en un solo programa y agregar a la rutina main() el llamado a los recorridos, preOrden, inOrden y postOrden.

• Entregar programa y código ya desarrollados.

Page 32: Estructura de Datos - Unidad 4 Estructuras no lineales

Grafos

Page 33: Estructura de Datos - Unidad 4 Estructuras no lineales

• Un grafo G agrupa entes físico o conceptuales y las relaciones entre ellos. Por tanto, un grafo está formado por un conjunto de vértices o nodos V, que representan a los entes, y un conjunto de arcos A, que representan las relaciones entre vértices. Se representa con el par G = (V, A).

La figura muestra un grafo G formado por los vértices V = {1,4,5,7,9} y el conjunto de arcos:A = {(1, 4), (4, 1), (5, 1), (1, 5), (7, 9), (9, 7), (7, 5), (5, 7), (4, 9), (9, 4)}

Page 34: Estructura de Datos - Unidad 4 Estructuras no lineales

• Un arco o arista representa una relación entre dos nodos. Esta relación, al estar formada por dos nodos, se representa por (u, v) siendo u, v el par de nodos.

• El grafo es no dirigido si los arcos están formados por pares de nodos no ordenados, no apuntados; se representa con un segmento uniendo los nodos, u v.⎯

Page 35: Estructura de Datos - Unidad 4 Estructuras no lineales

• Un grafo es dirigido, también denominado digrafo, si los pares de nodos que forman los arcos son ordenados; se representan con una flecha que indica la dirección de la relación, u --> v.

El grafo de la sig. figura que consta de los vértices: V = {C, D, E, F, H}, y de los arcos A = {(C, D,), (D, F), (E, H), (H, E), (E, C)} forman el grafo dirigido G = {V, A}

Page 36: Estructura de Datos - Unidad 4 Estructuras no lineales

• En los modelos realizados con grafos, a veces, una relación entre dos nodos tiene asociada una magnitud, denominada factor de peso, en cuyo caso se dice que es un grafo valorado. • Por ejemplo: los pueblos que forman una comarca junto a la relación entre un

par de pueblos de estar unidos por un camino: esta relación tiene asociado el factor de peso, que es la distancia en kilómetros. La figura sig. muestra un grafo valorado en el que cada arco tiene asociado un peso que es la longitud entre dos nodos.

Page 37: Estructura de Datos - Unidad 4 Estructuras no lineales

Grado de entrada, grado de salida de un nodo

• El grado es una cualidad que se refiere a los nodos de un grafo. En un grafo no dirigido el grado de un nodo v, grado(v), es el número de arcos que contiene a v.

• En un grafo dirigido se distingue entre grado de entrada y grado de salida; grado de entrada de un nodo v, gradent(v), es el número de arcos que llegan a v; grado de salida de v, gradsal(v), es el número de arcos que salen de v.

Page 38: Estructura de Datos - Unidad 4 Estructuras no lineales

Así, en el grafo no dirigido de la figura Comarcas, grado(Lupiana) = 3. En el grafo dirigido de la figura Letras, gradent(E) = 1 y el gradsal(E) = 2.

Page 39: Estructura de Datos - Unidad 4 Estructuras no lineales

Camino• Un camino P de longitud n desde el vértice v0 a vn en un grafo G, es la secuencia de

n - 1 vértices v0, v1, v2, ..., vn tal que (vi, vi+1) Є A(arcos). Matemáticamente el camino se representa por P = (v0, v1, v2,..., vn).

En la sig. figura se pueden encontrar más de un camino; por ejemplo: P1 = (4, 6, 9, 7) es un camino de longitud 3. Otro de los caminos es P2 = (10, 11), que tiene de longitud 1. Por tanto, se puede afirmar que la longitud del camino es el número de arcos que lo forman.

Page 40: Estructura de Datos - Unidad 4 Estructuras no lineales

Un grafo no dirigido es conexo si existe un camino entre cualquier par de nodos que forman el grafo. En el caso de un grafo dirigido con esta propiedad se dice que es fuertemente conexo. Además, un grafo completo es aquél que tiene un arco para cualquier par de vértices.

Page 41: Estructura de Datos - Unidad 4 Estructuras no lineales

Ejercicio: Del siguiente ejemplo de grafo determine sus características de acuerdo a las definiciones ya vistas:

• Determine el conjunto V;• Determine los arcos A;• Determine si es dirigido o no

dirigido• Determine 3 caminos para

llegar de Badajoz a Gerona y determine la longitud de cada camino.

• Determine el grado de los vértices Madrid, Murcia, Valladolid, Jaén, y Bilbao.

Page 42: Estructura de Datos - Unidad 4 Estructuras no lineales

Bibliografía

• Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, España. 2007. ISBN: 978-84-481-5645-9.