estructura de datos - unidad 4 estructuras no lineales

Post on 13-Apr-2017

78 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Estructura de DatosUnidad IV: Estructuras no Lineales

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

problemas del mundo real.

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.

Árboles

Á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.

• 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

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.

En relación a su tamaño:

En relación a su tamaño:

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.

Á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:

• .

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:

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.

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.

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).

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

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.

• 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.

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

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).

• 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.

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

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

Preorden

Postorden

Enorden

Á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:

Lógica del módulo principal:

Módulo recursivo para insertar nodos en el árbol

Recorrido Recursivo en PreOrden:

Recorrido Recursivo en InOrden:

Recorrido Recursivo en PostOrden:

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.

Grafos

• 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)}

• 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.⎯

• 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}

• 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.

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.

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.

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.

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.

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.

Bibliografía

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

top related