UNIDAD 4 Estructuras no lineales
4.1. Árboles.Los arboles representan las estructuras no lineales y dinámicas de datos más importantes en computación . Dinámicas porque las estructuras de árbol pueden cambiar durante la ejecución de un programa. No lineales, puesto que a cada elemento del árbol pueden seguirle varios elementos.Los arboles pueden ser construidos con estructuras estáticas y dinámicas. Las estáticas son arreglos, registros y conjuntos, mientras que las dinámicas están representadas por listas.Los arboles tienen una gran variedad de aplicaciones. Por ejemplo, se pueden utilizar para representar fórmulas matemáticas, para organizar adecuadamente la información, para construir un árbol genealógico, para el análisis de circuitos eléctricos y para numerar los capítulos y secciones de un libro.
4.1.1.- DefiniciónEn ciencias de la informática, un árbol es una estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto de nodos conectados). RAIZ O NODO PADRE: El nodo principal del cual salen los hijos.HIJOS: Son todos los que descienden de un nodo Padre.Hojas: Es un nodo que no tiene hijos.
4.1.2 Representación en memoria de árbolesHay dos formas tradicionales de representar un árbol binario en                      memoria:Por medio de datos tipo punteros también conocidos como variables  dinámicas o listas.
Por medio de arreglos. Los nodos del árbol binario serán representados como registros que contendrán como mínimo tres campos. En un campo se almacenará la información del nodo. Los dos restantes se utilizarán para apuntar al subárbol izquierdo y derecho del subárbol en cuestión. Cada nodo se representa gráficamente de la siguiente manera:
Procedimiento crear(q:nodo) Inicio mensaje("Rama izquierda?") lee(respuesta) si respuesta = "si" entonces new(p) q(li) <-- nilcrear(p) en caso contrario q(li) <-- nilmensaje("Rama derecha?") lee(respuesta) si respuesta="si" entonces new(p) q(ld)<--p crear(p) en caso contrario q(ld) <--nilfin INICIO new(p) raiz<--p crear(p) FINEl algoritmo de creación de un árbol binario es el siguiente:
4.1.2 Representación en memoria de árbolesLos árboles binarios también pueden ser almacenados como una estructura de datos implícita en vectores, y si el árbol es un árbol binario completo, este método no desaprovecha el espacio en memoria. Tomaremos como notación la siguiente: Si un nodo tiene un índice i, sus hijos se encuentran en índices 2i + 1 y 2i + 2, mientras que sus padres (si los tiene) se encuentra en el índice (partiendo de que la raíz tenga índice cero). Este método tiene como ventajas el tener almacenados los datos de forma más compacta y por tener una forma más rápida y eficiente de localizar los datos en particular durante un Preodentransversal. Sin embargo, desperdicia mucho espacio en memoria. 
4.1.2.1 Árboles generalesEn un árbol general cada nodo puede poseer un número indeterminado de hijos. La implementación de los nodos en este caso se realiza de la siguiente manera: como no se sabe de antemano cuantos hijos tiene un nodo en particular se utilizan dos referencias, una a su primer hijo y otra a su hermano más cercano. La raíz del árbol necesariamente tiene la referencia a su hermano como null.
Nótese que todo árbol general puede representarse como un árbol binario, con la salvedad que el hijo derecho de la raíz es siempre null. Si se permite que la raíz del árbol tenga hermanos, lo que se conoce como bosque, entonces se tiene que el conjunto de los bosques generales es isomorfo al conjunto de los árboles binarios. En efecto, las propiedades vistas en los árboles binarios se siguen cumpliendo en los árboles generales.
4.1.2.2 Árbol binarioUn árbol de búsqueda binaria es una estructura apropiada para muchas de las aplicaciones que se han discutido anteriormente con listas. La ventaja especial de utilizar un árbol es que se facilita la búsqueda. Un árbol binario de búsqueda es aquel en el que el hijo de la izquierda (si existe) de cualquier nodo contiene un valor más pequeño que el nodo padre, y el hijo de la derecha (si existe) contiene un valor más grande que el nodo padre.Un ejemplo de árbol binario de búsqueda es el siguiente:
4.1.3 Recorridos de un árbol binario.Nos sirve para realizar la obtención de la notación Polaca, para pasarlo a la unidad Aritmética Lógica para poder interpretar operaciones.4.1.3.1 Preorden4.1.3.2 Inorden4.1.3.3 Postorden:
Preorden: ABDGEHICFJKInorden: GDBHEIACJKF Postorden: GDHIEBKJFCA
4.2 Grafos DefiniciónUn grafo es la unidad abstracta que comprende el conjunto de grafías de una letra. La palabra tiene origen griego y significa “dibujo” o “imagen”.Para las matemáticas y las ciencias de la computación, un grafo es el principal objeto de estudio de la teoría de grafos. De esta forma, un grafo se representa gráficamente como un conjunto de puntos (llamados vértices o nodos), unidos por líneas (aristas). Los grafos permiten estudiar las interrelaciones entre unidades que se encuentran en interacción.
La terminología que manejaremos regularmente para el uso de grafos es la siguiente:CAMINO. Esuna secuencia de vértices V1, V2, V3, ... , Vn, tal que cada uno de estos V1->V2, V2->V3, V1->V3.
LONGITUD DE CAMINO. Es el número de arcos en ese camino.
CAMINO SIMPLE. Es cuando todos sus vértices, excepto tal vez el primero y el último son distintos.
CICLO SIMPLE. Es un camino simple de longitud por lo menos de uno que empieza y termina en el mismo vértice.
ARISTAS PARALELAS. Es cuando hay más de una arista con un vértice inicial y uno terminal dados. GRAFO CICLICO. Se dice que un grafo es cíclico cuando contiene por lo menos un ciclo.
GRAFO ACICLICO. Se dice que un grafo es a cíclico cuando no contiene ciclos.
GRAFO CONEXO. Un grafo G es conexo, si y solo si existe un camino simple en cualesquiera dos nodos de G.

Ascii

  • 1.
  • 2.
    4.1. Árboles.Los arbolesrepresentan las estructuras no lineales y dinámicas de datos más importantes en computación . Dinámicas porque las estructuras de árbol pueden cambiar durante la ejecución de un programa. No lineales, puesto que a cada elemento del árbol pueden seguirle varios elementos.Los arboles pueden ser construidos con estructuras estáticas y dinámicas. Las estáticas son arreglos, registros y conjuntos, mientras que las dinámicas están representadas por listas.Los arboles tienen una gran variedad de aplicaciones. Por ejemplo, se pueden utilizar para representar fórmulas matemáticas, para organizar adecuadamente la información, para construir un árbol genealógico, para el análisis de circuitos eléctricos y para numerar los capítulos y secciones de un libro.
  • 3.
    4.1.1.- DefiniciónEn cienciasde la informática, un árbol es una estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto de nodos conectados). RAIZ O NODO PADRE: El nodo principal del cual salen los hijos.HIJOS: Son todos los que descienden de un nodo Padre.Hojas: Es un nodo que no tiene hijos.
  • 4.
    4.1.2 Representación enmemoria de árbolesHay dos formas tradicionales de representar un árbol binario en memoria:Por medio de datos tipo punteros también conocidos como variables dinámicas o listas.
  • 5.
    Por medio dearreglos. Los nodos del árbol binario serán representados como registros que contendrán como mínimo tres campos. En un campo se almacenará la información del nodo. Los dos restantes se utilizarán para apuntar al subárbol izquierdo y derecho del subárbol en cuestión. Cada nodo se representa gráficamente de la siguiente manera:
  • 6.
    Procedimiento crear(q:nodo) Iniciomensaje("Rama izquierda?") lee(respuesta) si respuesta = "si" entonces new(p) q(li) <-- nilcrear(p) en caso contrario q(li) <-- nilmensaje("Rama derecha?") lee(respuesta) si respuesta="si" entonces new(p) q(ld)<--p crear(p) en caso contrario q(ld) <--nilfin INICIO new(p) raiz<--p crear(p) FINEl algoritmo de creación de un árbol binario es el siguiente:
  • 7.
    4.1.2 Representación enmemoria de árbolesLos árboles binarios también pueden ser almacenados como una estructura de datos implícita en vectores, y si el árbol es un árbol binario completo, este método no desaprovecha el espacio en memoria. Tomaremos como notación la siguiente: Si un nodo tiene un índice i, sus hijos se encuentran en índices 2i + 1 y 2i + 2, mientras que sus padres (si los tiene) se encuentra en el índice (partiendo de que la raíz tenga índice cero). Este método tiene como ventajas el tener almacenados los datos de forma más compacta y por tener una forma más rápida y eficiente de localizar los datos en particular durante un Preodentransversal. Sin embargo, desperdicia mucho espacio en memoria. 
  • 8.
    4.1.2.1 Árboles generalesEnun árbol general cada nodo puede poseer un número indeterminado de hijos. La implementación de los nodos en este caso se realiza de la siguiente manera: como no se sabe de antemano cuantos hijos tiene un nodo en particular se utilizan dos referencias, una a su primer hijo y otra a su hermano más cercano. La raíz del árbol necesariamente tiene la referencia a su hermano como null.
  • 9.
    Nótese que todoárbol general puede representarse como un árbol binario, con la salvedad que el hijo derecho de la raíz es siempre null. Si se permite que la raíz del árbol tenga hermanos, lo que se conoce como bosque, entonces se tiene que el conjunto de los bosques generales es isomorfo al conjunto de los árboles binarios. En efecto, las propiedades vistas en los árboles binarios se siguen cumpliendo en los árboles generales.
  • 10.
    4.1.2.2 Árbol binarioUnárbol de búsqueda binaria es una estructura apropiada para muchas de las aplicaciones que se han discutido anteriormente con listas. La ventaja especial de utilizar un árbol es que se facilita la búsqueda. Un árbol binario de búsqueda es aquel en el que el hijo de la izquierda (si existe) de cualquier nodo contiene un valor más pequeño que el nodo padre, y el hijo de la derecha (si existe) contiene un valor más grande que el nodo padre.Un ejemplo de árbol binario de búsqueda es el siguiente:
  • 11.
    4.1.3 Recorridos deun árbol binario.Nos sirve para realizar la obtención de la notación Polaca, para pasarlo a la unidad Aritmética Lógica para poder interpretar operaciones.4.1.3.1 Preorden4.1.3.2 Inorden4.1.3.3 Postorden:
  • 12.
  • 13.
    4.2 Grafos DefiniciónUngrafo es la unidad abstracta que comprende el conjunto de grafías de una letra. La palabra tiene origen griego y significa “dibujo” o “imagen”.Para las matemáticas y las ciencias de la computación, un grafo es el principal objeto de estudio de la teoría de grafos. De esta forma, un grafo se representa gráficamente como un conjunto de puntos (llamados vértices o nodos), unidos por líneas (aristas). Los grafos permiten estudiar las interrelaciones entre unidades que se encuentran en interacción.
  • 14.
    La terminología quemanejaremos regularmente para el uso de grafos es la siguiente:CAMINO. Esuna secuencia de vértices V1, V2, V3, ... , Vn, tal que cada uno de estos V1->V2, V2->V3, V1->V3.
  • 15.
    LONGITUD DE CAMINO.Es el número de arcos en ese camino.
  • 16.
    CAMINO SIMPLE. Escuando todos sus vértices, excepto tal vez el primero y el último son distintos.
  • 17.
    CICLO SIMPLE. Esun camino simple de longitud por lo menos de uno que empieza y termina en el mismo vértice.
  • 18.
    ARISTAS PARALELAS. Escuando hay más de una arista con un vértice inicial y uno terminal dados. GRAFO CICLICO. Se dice que un grafo es cíclico cuando contiene por lo menos un ciclo.
  • 19.
    GRAFO ACICLICO. Sedice que un grafo es a cíclico cuando no contiene ciclos.
  • 20.
    GRAFO CONEXO. Ungrafo G es conexo, si y solo si existe un camino simple en cualesquiera dos nodos de G.