Unidad 4 Arboles y Grafos OAG (Investigacion 2)
Short Description
Download Unidad 4 Arboles y Grafos OAG (Investigacion 2)...
Description
INSTITUTO TECNOLÓGICO DE TUXTEPEC
ESTRUCTURA DE DATOS L.I. THOMAS TORRES RAMÍREZ
TEMA: ESTRUCTURAS NO LINEALES
UNIDAD 4 PRESENTA: OSVALDO APOLINAR GONZALEZ
ING. EN INFORMÁTICA
3ER SEMESTRE GRUPO “A”
TUXTEPEC OAXACA A 9 DE NOVIEMBRE DEL 2011
CONTENIDO Introducción Unidad 4 Estructuras no lineales 4.1 Arboles 4.1.1 Concepto de árbol 4.1.2 Clasificación de arboles 4.1.3 Operaciones básicas sobre arboles binarios 4.1.4 Aplicaciones 4.1.5 Arboles balanceados (AVL) 4.2 Grafos 4.2.1 Terminología de grafos 4.2.2 Operaciones básicas sobre grafos Conclusión Bibliografía
INTRODUCCIÓN: La investigación se realizó con base al tema central que son las estructuras no lineales las cuales esta divididas en árboles y grafos. Los “arboles” representan las estructuras no lineales y dinámicas de datos más importantes en computación. Son dinámicas porque la estructura árbol puede cambiar durante la ejecución de un programa, y no lineales porque a cada elemento del árbol pueden seguirle varios elementos, a su vez los “grafos ” son un conjunto de nodos. Los conceptos previamente citados serán descritos más detalladamente a continuación.
4.1 ARBOLES 4.1.1 CONCEPTO DE ARBOLES Las listas enlazadas, pilas y colas son estructuras de datos lineales (es decir, secuencias). Un árbol es una estructura de datos bidimensional no lineal, con propiedades especiales. Los nodos de un árbol contienen dos o mas enlaces. Intuitivamente el concepto árbol implica una estructura de modo en que los elementos de información están relacionados entre si a través de ramas. El árbol genealógico es el concepto típico más representativo del concepto de árbol general. En 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). Un nodo es la unidad sobre la que se construye el árbol y puede tener cero o más nodos hijos conectados a él. Se dice que un nodo a es padre de un nodo b si existe un enlace desde a hasta b (en ese caso, también decimos que b es hijo de a ). ). Sólo puede haber un único nodo sin padres, que llamaremos raíz. raíz. Un nodo que no tiene hijos se conoce como hoja. hoja. Los demás nodos (tienen padre y uno o varios hijos) se les conoce como rama. rama. je
Los Árboles tienen 3 Recorridos Diferentes los cuales son: * Pre-Orden: La raíz se procesa primero, luego el subárbol izquierdo y luego el derecho. * In-Orden: Primero la raíz, luego el subárbol izquierdo y luego el derecho. * Post-Orden: Primero el subárbol izquierdo, luego el derecho y luego la raíz.
4.1.2 CLASIFICACIÓN DE ARBOLES - Arboles binarios: Arboles cuyos nodos contienen dos enlaces (uno de los cuales puede ser null). El nodo raíz es el primer nodo de un árbol. Cada enlace en el nodo raíz hace referencia a un hijo. El hijo izquierdo es el primer nodo en el subárbol izquierdo (también conocido como el nodo raíz del subárbol izquierdo). El hijo derecho es el primer nodo en el subárbol derecho (también conocido como el nodo raíz del subárbol derecho). Los hijos de un nodo especifico se llaman hermanos. Un nodo sin hijos se llama nodo hoja. Generalmente, los científicos computacionales dibujan arboles desde el nodo raíz hacia abajo; exactamente lo opuesto a la manera en que crecen los arboles naturales. Recorrido de un árbol binario: - Recorrido: Requiere que cada nodo del árbol sea procesado (visitado) una vez y solo en una secuencia predeterminada. Existen dos enfoques generales para la secuencia de recorrido, profundidad y anchura. Recorrido en profundidad: El proceso exige un camino desde la raíz a través de un hijo, al descendiente más lejano del primer hijo antes de proseguir a un segundo hijo. En otras palabras, en el recorrido en profundidad, todos los descendientes de un hijo se procesaran antes del siguiente hijo. Recorrido en anchura: El proceso se realiza horizontalmente desde el raíz a todos sus hijos, a continuación a los hijos de sus hijos y así sucesivamente hasta que todos los nodos han sido procesados. En otras palabras, en el recorrido en anchura cada nivel se procesa totalmente antes que comience el siguiente nivel. - Arboles de búsqueda binaria: (Sin valores de nodo duplicado) cuenta con la característica de que los valores en cualquier subárbol izquierdo son menores que el valor del nodo padre de ese subárbol, y el valores en cualquier subárbol derecho son mayores que el valor del nodo padre de ese subárbol.
El árbol de búsqueda binaria facilita la eliminación de valores duplicados. Al crear un árbol, la operación de inserción reconoce los intentos de insertar un valor duplicado, ya que este sigue as isas decisines de “ir a a izquierda” “ir a a derecha” en
cada comparación, al igual que el valor original. Por lo tanto, la operación de inserción eventualmente compara el valor duplicado con un nodo que contenga el mismo valor. En este punto, la operación de inserción puede decidir descartar el valor duplicado. - Arboles estrechamente empaquetados (o balanceados): En este tipo de arboles, cada nivel contiene cerca del doble de elementos que el nivel anterior. - Arboles AVL: AVL: Están siempre equilibrados de tal modo que para todos los nodos, la altura de la rama izquierda no difiere en más de una unidad de la altura de la rama derecha o viceversa. Gracias a esta forma de equilibrio (o balanceo), la complejidad de una búsqueda en uno de estos árboles se mantiene siempre en orden de complejidad O (log n). El factor de equilibrio puede ser almacenado directamente en cada nodo o ser computado a partir de las alturas de los subárboles. Ejemplo:
- Arboles rojo negro: Un árbol rojo-negro es un árbol binario de búsqueda en el que cada nodo tiene un atributo de color cuyo valor es o bien rojo o bien negro. negro. Además de los requisitos impuestos a los árboles binarios de búsqueda convencionales, se deben satisfacer los siguientes para tener un árbol rojo-negro válido: ▪
Todo nodo es o bien rojo o bien negro.
▪
La raíz es negra.
▪
Todas las hojas son negras (las hojas son los hijos nulos).
▪
Los hijos de todo nodo rojo son negros (también llamada "Propiedad del rojo").
▪
Cada camino simple desde un nodo a una hoja descendiente contiene el mismo número de nodos negros, ya sea contando siempre los nodos negros nulos, o bien no contándolos nunca (el resultado es equivalente). También es llamada "Propiedad del camino", y al número de nodos negros de cada camino, que es constante para todos los caminos, se le denomina "Altura negra del árbol", y por tanto el camino no puede tener dos rojos seguidos.
El camino más largo desde la raíz hasta una hoja no es más largo que 2 veces el camino más corto desde la raíz del árbol a una hoja en dicho árbol. El resultado es que dicho árbol está aproximadamente equilibrado. - Árbol AA: Los árboles AA son una variación del árbol rojo-negro, que a su vez es una mejora del árbol binario de búsqueda. A diferencia de los árboles rojo-negro, los nodos rojos en un árbol AA sólo pueden añadirse como un hijo derecho. En otras palabras, ningún nodo rojo puede ser un hijo izquierdo. - Arboles multicamino: Un árbol multicamino posee un grado g mayor a dos, donde cada nodo de información del árbol tiene un máximo de g hijos. 4.1.3 OPERACIONES BÁSICAS SOBRE ARBOLES BINARIOS ▪
Enumerar todos los elementos.
▪
Buscar un elemento.
▪
Dado un nodo, listar los hijos (si los hay).
▪
Borrar un elemento.
▪
Eliminar un subárbol (algunas veces llamada podar). podar).
▪
Añadir un subárbol (algunas veces llamada injertar). injertar ).
▪
Encontrar la raíz de cualquier nodo.
Por su parte, la representación puede realizarse de diferentes formas. Las más utilizadas son:
▪
Representar cada nodo como una variable en el heap, con punteros a sus hijos y a su padre.
▪
Representar el árbol con un array donde cada elemento es un nodo y las relaciones padre-hijo vienen dadas por la posición del nodo en el array. 4.1.4 APLICACIONES APLICACIONES
Los arboles binarios facilitan la búsqueda y ordenamiento de los datos de alta velocidad, la eliminación eficiente de elementos de datos duplicados, la representación de directorios del sistema de archivos y la compilación de expresiones en lenguaje maquina. El árbol de búsqueda binaria facilita la eliminación de valores duplicados. Al crear un árbol se reconocen los intentos de insertar un valor duplicado, ya que este sigue las mismas decisiones de “ir a a izquierda” “ir a a derecha” en cada caración, a igual que el valor original. Por lo tanto, eventualmente se comprar el valor duplicado con un nodo que contenga el mismo valor. El valor duplicado puede destacarse en este punto. Otra de las aplicaciones mas importantes es dentro de la inteligencia artificial, y mas concretamente en el área de reconocimiento de patrones. Se trata de utilizar los arboles para realizar clasificaciones. La clave esta en asignar a cada nodo del árbol un significado. Las distintas ramas tienen asociados criterios que ayudan a determinar el sentido de las búsquedas. También con aplicables en el análisis de notaciones algebraicas y la implementación de algoritmos de compresión, etc.
4.1.5 ARBOLES BALANCEADOS (AVL) La búsqueda mas eficiente se efectúa en un árbol binario balanceado. Desafortunadamente, la función Inserta no asegura que el árbol permanezca balanceada, el grado de balance depende del orden en que son insertados los nodos en el árbol. Un árbol esta perfectamente balanceado si su estructura es optima con respecto al largo del camino de la raíz a cada hoja: Todas las hojas están en el mismo nivel, es decir, el largo máximo de tal camino es igual al largo mínimo de tal camino sobre todas las hojas. La altura de un árbol binario es el nivel máximo de sus hojas (profundidad). La altura del árbol uno se define como -1. Un árbol binario balanceado es un árbol binario en el cual las alturas de los subárboles de todo nodo difiere a lo sumo en 1. El balance de un nodo en un árbol binario se define como la altura de su subárbol izquierdo menos la altura de su subárbol derecho. Cada nodo en un árbol binario balanceado tiene balance igual a 1, -1 o 0, dependiendo de si la altura de su subárbol izquierdo es mayor que, menos que o igual a la altura de su subárbol derecho. Supóngase que tenemos un árbol binario balanceado, y usamos la función para insertar un nodo en dicho árbol. Entonces el árbol resultante puede o no permanecer balanceado. Es fácil ver que el árbol se vuelve desbalanceado si y solo si el nodo recién insertado es un descendiente izquierdo de un nodo que tenia de manera previa balance de 1, o si es un hijo derecho descendiente de un nodo que tenia de manera previa balance -1. Para que el árbol se mantenga balanceado es necesario realizar una transformación en el mismo de manera que: 1.- El recorrido en orden del árbol transformado sea el mismo que para el árbol original (es decir, que el árbol transformado siga siendo un árbol de búsqueda binaria). 2.- El árbol transformado este balanceado.
Los arboles son estructuras recursivas, por lo que los algoritmos mas eficientes con arboles son los recursivos.
4.2 GRAFOS Un grafo es una estructura de datos no lineal con la siguiente característica: un nodo puede apuntar a varios y a su vez ser apuntado por otro.
4.2.1 TERMINOLOGÍA DE GRAFOS Un grafo se compone por un conjunto de V vértices y un conjunto de A aristas. Cada arista se identifica con el par de vértices que une. Los vértices de una arista son entre si nodos adyacentes. - Grado de un nodo: Numero de aristas que contiene ese nodo. Si el grado de un nodo es 0, se dice que es un nodo aislado. - Grado de un grafo: Números de vértices de ese grafo. - Camino: Un camino C de longitud N de un nodo V1 a un nodo V2, se define como la secuencia de nodos por los que hay que pasar para llegar del nodo V1 a V2. La longitud es el numero de aristas que comprende el camino. El camino es cerrado si empieza y termina en el mismo nodo. El camino es simple si todos los nodos de dicho camino son distintos a excepción de los de los extremos que pueden ser iguales. - Bucles: Aristas cuyos extremos son idénticos. - Aristas múltiples: Dos o mas aristas que conectan los mismos nodos. Tipos de grafos: - Grafo conectado o conexo: Existe un camino simple entre dos cualquiera de sus nodos. - Grafo desconectado: Aquel en que existen nodos que no están unidos por ningún camino.
- Grafo dirigido: Cada arista tiene asignada una dirección (identificada por un par ordenado). - Grafo no dirigido: La arista esta definida por un par no ordenado. - Grafo sencillo: Aquel que no tiene ni bucles ni aristas múltiples. - Grafo múltiple o multígrafo: Permite la existencia de aristas múltiples o bucles. - Grafo completo: Cada nodo del grafo es adyacente a todos los demás. - Grafo etiquetado con peso ponderado: Cada arista tiene asociado un valor denominado peso. Se usa para indicar algún criterio de evaluación como la longitud o la importancia de la arista respecto a un parámetro. - Peso de un camino: La suma de los pesos de las aristas del camino. Representación de los grafos: Existen dos formas de representar un grafo: - Con memoria estática (Matriz adyacente): Matriz Matriz de N*N N*N elementos elementos donde N es el numero de nodos del grafo. Cada posición M(i,j) indica si hay una conexión o no entre los nodos que están asociados a la posición i y j de la matriz. - Con memoria dinámica. Se utilizan 2 listas enlazadas: *Lista de nodos: Formada por todos lo vértices *Lista de adyacentes: Contiene las aristas del grafo. 4.2.2 OPERACIONES BÁSICAS SOBRE GRAFOS - Búsqueda de un nodo: Se trata de localizar un nodos que contiene una determinada información. Para ello le pasamos la información al procedimiento de búsqueda y este devuelve su posición p osición si lo encuentra, o NULL en caso contrario. - Búsqueda de una arista: Se trata de buscar una arista dados sus campos de información origen y destino. Devuelve un puntero a la lista de aristas que apunta a esa arista o NULL si no existe.
- Inserción de un nodo: Se recorre el grafo hasta el punto de inserción. A continuación se actualizan los puntos que salen del nuevo nodo y aquellos que lo apunten a el desde nodos ya existentes. - Inserción de una arista: Primero hay que comprobar si existen los nodos origen y destino, luego hay que comprobar que no exista una arista igual en esa dirección. Por ultimo se realizara la inserción. - Borrado de un nodo: Primero se borra un nodo y después todas sus aristas.
CONCLUSIÓN: Tanto los arboles como los grafos son estructuras de datos no lineales, de igual manera tienen la características de que ambas estructuras están conformadas por nodos. En si los arboles son estructuras que implican la relación de sus elementos a través de ramas mientras que los grafos son estructuras que están formadas por un conjunto de vértices y un conjunto de aristas. Por ultimo, los arboles facilitan la búsqueda y ordenamiento de los datos; en tanto los grafos pueden representar diagramas de transformación de estado, también se aplican en diversos campos de investigación para encontrar el método mas corto y mas rentable.
BIBLIOGRAFÍA: DEITEL, HARVEY M. & DEITEL, PAUL J. Quinta edición Como programar en Java
PEARSON EDUCACION, México 2004 ISBN: 970-26-0518-0 Área: Universitarios Formato: 20 X 25.5 cm Paginas: 1268
LEWIS, J. Y CHASEJ. Segunda edición Estructuras de datos con Java. Diseño de estructuras y algoritmos.
PEARSON AddissonWesley. 2006 Págs. 152-161, 166-174, 180-182, 193-205
TÉCNICO DE SOPORTE INFORMÁTICO GRUPO III De la Comunidad de Castilla y León. Volumen 1 Editor: MAD – Eduforma ISBN: 8466550984
View more...
Comments