Dentro del presente reporte de prctica, se dan a conocer algunas de las estructuras de datos no lineales, mismo nombre que recibe la unidad nmero cuatro de esta materia. Durante el transcurso de esta unidad, se estudiaran y analizaran las estructuras de datos antes mencionadas, para su comprensin y pronta aplicacin. El comportamiento que tienen estas estructuras de datos, son esenciales, para que posteriormente se entienda el funcionamiento de las otras estructuras de datos existentes, que son las no lineales, por lo que se debi poner suma atencin a las clases. Debido a que durante estas se dieron los conocimientos necesarios, y despus llevar estos mismos a la prctica, creando programas en java sobre las estructuras de datos ya mencionadas. El objetivo principal de esta unidad y de la creacin de estas prcticas, es observar cmo es su comportamiento, como facilitar su manejo, como aplicarlas pero sobre todo entender perfectamente cmo es que funcionan.
Marco terico
Estructuras de datos no lineales Estas estructuras se caracterizan principalmente porque sus elementos estn organizados consecutivamente, es decir, cada elemento tiene un antecesor y un sucesor y as sucesivamente. Como ya se haba mencionado antes, solo estudiaremos dos de estas estructuras, las cuales son, arboles y grafos. A pesar de que son estructuras no lineales, cada una tiene sus propias caractersticas que las distinguen de las dems. Empecemos por el rbol es una abstraccin matemtica de una estructura no lineal que modela una estructura jerrquica. En computacin los encontramos en los compiladores, en la organizacin de sistemas de archivos la estructura de herencia de las clases de Java es un rbol, la invocacin de los mtodos en tiempo de ejecucin en Java es un rbol; procesamiento de textos y algoritmos de bsqueda. Podemos concluir que el uso de un rbol es ms que un arreglo bien implementado, puesto que forma parte de nuestra toma de decisiones en la vida diaria. Un grafo est formado por un conjunto de nodos(o vrtices) y un conjunto de arcos. Cada arco en un grafo se especifica por un par de nodos. En los grafos, como en todas las estructuras de datos, las dos operaciones bsicas son insertar y borrar. En este caso, cada una de ellas se desdobla en dos, para insertar/eliminar vrtices e insertar/eliminar aristas. Los arboles y los grafos tienen cosas en comn, el hecho de que son llamados estructuras no lineales, y que trabajan con nodos e interconexiones sobre los mismos nodos, mas no son iguales, ya que los grafos a diferencia de los arboles tienen variacin de flujo de informacin y los arboles no puesto que se forman a partir de una estructura jerrquica desde la raz hasta las hojas no hay vuelta a atrs.
Desarrollo Temario 4.1 Arboles 4.1.1 Concepto de rbol 4.1.2 Clasificacin de arboles 4.1.3 Operaciones bsicas sobre arboles binarios 4.1.4 Aplicaciones arboles 4.1.5 Arboles balanceados 4.2 Grafos 4.2.1 Terminologa de grafos 4.2.2 Operaciones bsicas sobre grafos
4.1 Arboles 4.1.1 Concepto de rbol
El rbol es una abstraccin matemtica de una estructura no lineal que modela una estructura jerrquica. El rbol juega un papel central en el diseo y anlisis de algoritmos ya que se utilizan para describir propiedades dinmicas de los algoritmos y porque se construyen. Los rboles se encuentran frecuentemente en la vida diaria: en rboles genealgicos y representacin de torneos. En computacin los encontramos en los compiladores, en la organizacin de sistemas de archivos la estructura de herencia de las clases de Java es un rbol, la invocacin de los mtodos en tiempo de ejecucin en Java es un rbol; procesamiento de textos y algoritmos de bsqueda. Ejemplo de rbol; ARBOLES NO BINARIOS; Son aquellos rboles que tienen ms de dos ramificaciones depende el tipo de rbol que se elija tendr el nmero de ramificaciones mximas. Ejemplo el rbol ternario tendr 3 ramificaciones mximas. ARBOLES TERNARIOS Un rbol ternario es una estructura similar a un rbol, tiene una raz y cada nodo tiene mximo tres hijos es a ternario (de tres vas) rbol estructura de datos cul combina la eficacia del tiempo de digital intentos con la eficacia del espacio de rboles de bsqueda binaria. La estructura que resulta es ms rpida que hashing para muchos tpicos de bsqueda los problemas, y apoyan una gama ms amplia de problemas y de operaciones tiles.
Teorema. Dado un rbol m-ario, A = (V,E), donde |V | = v, h es el nmero de hojas e i el nmero de vrtices internos, se cumple que: v = mi + 1 h = (m 1)i + 1 i = h1 m1 = v1 m
Consecuencia: Un rbol binario tiene un nmero impar de vrtices, 2i + 1 (i Internos e i + 1 hojas) Teorema. Dado un rbol m-ario, A = (V,E) de altura a y con h hojas, se cumple que: ma h a [logmh], donde [x] es el menor entero que es mayor o igual que x . Ejemplo de rboles ternarios;
CREACION [Inicializacin] Sea S una sucesin de vrtices de G. S = {v1}, y sea T el subgrafo Formado por v1, que ser la raz del rbol T.
2. [Agregar las aristas] Para x S en orden, aadir la arista {x, y} a T para cada vrtice Y G en orden, siempre que {x, y} sea arista de G y no forme un ciclo al aadirlo a T , Y pasar a 3. Si no se pueden agregar lados, se ha terminado (T es un rbol generador). 3. [Actualizar S] Reemplazar S por los hijos (en T) de S ordenados segn el orden Original. Pasar a 2. Teorema. Sea G un grafo conexo y T el rbol obtenido mediante BEA. T es un rbol generador de G.M.A.
INSERCION DE ARBOL TERNARIOS Para insertar un elemento X en un rbol se realiza bsqueda infructuosa y se inserta dicho elemento en el ltimo nodo visitado durante la bsqueda, lo cual implica manejar dos casos distintos Caso 1: Si el nodo donde se inserta X tena una sola llave (dos hijos), ahora que da con dos llaves (tres hijos). Caso 2: Si el nodo donde se inserta X tena dos llaves (tres hijos), queda transitoriamente con tres llaves y se dice que est saturado. Ejemplo de insercin; ELIMINACION DE ARBOL TERNARIOS Sin perder generalidad se supondr que el elemento a eliminar z se encuentra en el nivel ms bajo del rbol, si esto no es as, entonces el sucesor y el predesor de z se encuentran necesariamente en el nivel ms bajo. En este caso basta con borrar uno de ellos y luego escribir su valor sobre el almacenado en z, La eliminacin tambin se presenta en sus dos posibles casos; Caso 1: El nodo donde se encuentra z contiene dos elementos. En este caso se elimina z y el nodo queda con un solo elemento. Caso 2: El nodo donde se encuentra z contiene un solo elemento. En este caso z el nodo queda sin elementos si el nodo hermano posee dos elementos se le quita uno y se inserta el nodo con UNDERFOLW. RECORRIDOS PRE-ORDEN * EL recorrido en pre-orden consiste en listar el nodo que se visita y despus los nodos en sub arboles del nodo visitado. * La seleccin del subconjunto a enlistar comienza con el hijo de ms a la izquierda y termina con el hijo de ms ala derecha. POST-ORDEN * Es aquel en que primero se enlistan los subrboles del nodo visitado, dejando en ltimo al nodo en cuestin. * La manera de seleccionar los subconjuntos es igual que en pre-orden, es decir de izquierda a derecha. SIMETRICO En orden simtrico se enlista el nodo visitado la segunda vez que se visita. Es decir que primero en listaremos el subconjunto de mas ala izquierda, luego el nodo en cuestin y por ltimo los subconjuntos restantes. ARBOLES CON RAIZ En este rbol un nodo es designado como la raz del rbol, en computacin se usa a este concepto se le conoce simplemente como rbol. * Un rbol con raz es un rbol libre donde un vrtice (llamado raz) es distinguido de los otros. * A los vrtices de los rboles con raz se les llama nodos. * Considere un nodo x en un rbol T con raz r: * Cualquier nodo en el (nico) camino de r a x es un ancestro de x. * A x se le llama entonces descendiente de y. * El sub-rbol con raz x es el rbol inducido por los descendientes de x.
4.1.2 Clasificacin de arboles Los rboles se clasifican de la siguiente manera: - rboles binarios. o Distintos o Similares o Equivalentes o Equilibrado o Completo
- rboles Multicaminos. o B o B+ o B* o R o 2-4
Un rbol binario es una estructura de datos homognea, dinmica y no lineal en donde a cada nodo le pueden seguir como mximo dos nodos hijos (que pueden estar vacos), y cada hijo se designa ya sea como hijo izquierdo o como hijo derecho.
4.1.3 Operaciones bsicas sobre arboles binarios
Un rbol binario es equilibrado es aquel que todos sus nodos cumplen con la propiedad: altura (subrbol izquierdo) altura (subrbol derecho) <= 1
Ejemplo. Si usamos los rboles anteriores para determinar si son o no equilibrados. El primero tiene una altura izquierda de 2 y derecha 1, 2-1 <= 1, la condicin es verdadera, por lo tanto es un rbol equilibrado. El segundo tiene una altura izquierda de 2 y derecha 0, 2-0 <= 1, la condicin es falsa, por lo tanto es un rbol no equilibrado. Un rbol binario es completo cuando todos sus nodos excepto los del ltimo nivel, tienen dos hijos y todas las hojas estn en el mismo nivel. Para calcular el nmero de nodos de un rbol completo se aplica la formula:
Nmero de nodos = 2 altura - 1 Las operaciones que se pueden aplicar a un rbol binario son las siguientes: - Creacin de un rbol - Insercin de un nodo nuevo. - Eliminacin de un nodo. - Recorrido del rbol. - Balanceo del rbol. Insercin. La operacin de insercin permite agregar un nuevo nodo hoja al rbol, pero antes de agregarlo, debemos tomar en cuenta como se hace el acomodo u organizacin de los nodos dentro de la estructura del rbol. El primer nodo que entra en el rbol se le conoce como nodo raz, del cual se desprendes los nodos intermedio y hojas. El segundo elemento que entra en el rbol, despus del nodo raz, tiene dos opciones para su insercin dentro de la estructura, el lado izquierdo o el lado derecho del rbol, para determinar por cul lado debe entrar el segundo nodo tenemos que determinar el valor del campo dato del nuevo nodo, si el dato es menor que el nodo actual, el nuevo nodo se inserta por el lado izquierdo, o si el dato es mayor que el nodo actual, el nuevo nodo se inserta por el lado derecho. De esta forma la estructura del rbol organiza los nodos para un rpido acceso y bsqueda de un elemento. Algo ms que debe contemplar despus elegir el camino por donde se insertara el nuevo nodo, es, si existe un espacio libre para la insercin del nuevo nodo, es decir, si el nodo actual no contiene hojas, el nuevo nodo se puede insertar, en caso contrario debe continuar la bsqueda de un lugar disponible dentro del rbol.
eliminacin La operacin de eliminacin de un nodo consiste en borrar el nodo del rbol binario de una forma definitiva, para este proceso la relacin del nodo que se quiere eliminar con otros nodos debe desaparecer, pero que sucede con los nodos que dependen del nodo que se quiere eliminar. Para esto analizaremos los tres casos de eliminacin en un rbol binario: Eliminacin de una hoja, Eliminacin de un padre con un hijo o subrbol y Eliminacin de un padre con dos hijos o subrboles. La eliminacin de una hoja, es simple, solo es necesario encontrar el padre y establecer en nulo la relacin con el nodo hoja. La eliminacin de un padre con un hijo, tambin es simple, solo se requiere conocer quin es el nodo anterior al padre y establecer una relacin con el nodo hijo y que el nodo hijo establezca la relacin con el que ser su nuevo padre. La eliminacin de un padre con dos hijos, no es tan simple como las anteriores ya que en este caso la eliminacin del padre genera dos nodos hijos que posiblemente no se puedan relacionar con el nodo anterior al padre, ya que se puede romper la integridad del rbol binario y agregar tres hojas a un padre. Para solucionar este problema se encuentran dos posibles soluciones: - Eliminacin por fusin y - Eliminacin por copiado. La eliminacin por fusin, genera un rbol nuevo de los dos subrboles que quedaron sin padre y el padre del nuevo rbol lo incorpora en el lugar donde est el nodo que se quiere eliminar. Para fusionar dos subrboles, se debe realizar el siguiente proceso: Dentro del subrbol izquierdo encuentre el elemento mayor, que por la naturaleza de los rboles binario, es el que est ms a la derecha del subrbol izquierdo y que no contiene hijo en su parte derecha o simplemente no contiene hijos, el nodo mayor encontrado se transforma en el nodo padre del subrbol derecho, estableciendo su campo derecha la relacin con el padre del subrbol derecho. Con esto formaremos un solo rbol, el cual debemos fusionarlo al rbol original, en el lugar donde se elimino el nodo. Ejemplo. Si queremos eliminar el nodo con el nmero 20 del siguiente rbol, el procedimiento sera el siguiente:
Encontrar el nodo que se quiere eliminar y el anterior a l, para este caso son los nodos marcados con los nmeros 20 y 10. Encontrar el nodo mayor del subrbol izquierdo, que para este caso sera el nodo con el nmero 15. Al campo derecho del nodo mayor asignarle el nodo padre del subrbol derecho, continuando con el ejemplo al nodo con el nmero 15 en su campo derecho asignarle el nodo con el nmero 30, que es el padre del subrbol derecho. Al nodo conocido como el anterior en su campo derecho asignarle el nodo padre del subrbol izquierdo, para terminar con este ejemplo al nodo con el nmero 10 en su campo derecho asignarle el nodo con el nmero 15.
Procesos de eliminacin por Fusin.
La eliminacin por copiado, se encarga de borrar el elemento del nodo que se quiere eliminar, cambindolo por el elemento del nodo sucesor inmediato. Debe recordar que cuando el nodo que se quiere eliminar tiene sus dos hijos, los hijos se transforman en padre o raz de dos subrboles, izquierdo y derecho, y el sucesor de cada subrbol se encuentra de la siguiente manera: a la derecha el sucesor del subrbol izquierdo o a la izquierda el sucesor del subrbol derecho. Para localizar el sucesor del nodo que se quiere eliminar, lo primero que se debe hacer es moverse un nodo a la izquierda del nodo que se quiere eliminar y avanzar a la derecha lo ms que sea posible, almacenando el nodo anterior al sucesor en cada movimiento. Posteriormente el elemento del nodo sucesor remplaza el elemento del nodo que se quiere eliminar y el nodo izquierdo del sucesor se relaciona con el nodo anterior al sucesor en su campo derecho. Ejemplo. Si queremos eliminar el nodo con el nmero 20 del siguiente rbol, el procedimiento sera el siguiente: Encontrar el nodo que se quiere eliminar y en anterior a l, para este caso son los nodos marcados con los nmeros 20 y 10.
Marcar como el sucesor el nodo que apunta el campo izquierdo del nodo a eliminar y el campo que se quiere eliminar es el anterior al sucesor, para este caso el sucesor es el nodo con el nmero 15 y el anterior es el nodo con el nmero 20. Moverse lo ms a la derecha posible marcando el nodo hacia donde se mueve como el sucesor y el anterior a l, al terminar esta bsqueda el sucesor es el nodo con el nmero 18 y el anterior al sucesor es el nodo con el nmero 15. Cambiar el elemento del nodo que se quiere eliminar por el elemento que tiene el nodo sucesor, para este caso quitar el 20 y ponerle el nmero 18 en su lugar. Por ltimo al nodo anterior en su campo derecho asignarlo como nulo si el sucesor no contiene un nodo en su parte izquierda. Si el sucesor contiene un nodo en su parte izquierda, el nodo anterior al sucesor en su campo derecho debe apuntar al nodo izquierdo del sucesor, que para este caso no se presento esa situacin.
4.1.4 Aplicaciones arboles.
Un ejemplo de estructura en rbol es el sistema de directorios y ficheros de un sistema operativo. Aunque en este caso se trata de rboles con nodos de dos tipos, nodos directorio y nodos archivo, podramos considerar que los nodos hoja son archivos y los nodos rama son directorios. Otro ejemplo podra ser la tabla de contenido de un libro, por ejemplo de este mismo manual, dividido en captulos, y cada uno de ellos en subcaptulos. Aunque el libro sea algo lineal, como una lista, en el que cada captulo sigue al anterior, tambin es posible acceder a cualquier punto de l a travs de la tabla de contenido. Tambin se suelen organizar en forma de rbol los organigramas de mando en empresas o en el ejrcito, y los rboles genealgicos.}
4.1.5 Arboles balanceados.
Un rbol AVL (llamado as por las inciales de sus inventores: Adelson-Velskii y Landis) es un rbol binario de bsqueda en el que para cada nodo, las alturas de sus subrboles izquierdo y derecho no difieren en ms de 1. No se trata de rboles perfectamente equilibrados, pero s son lo suficientemente equilibrados como para que su comportamiento sea lo bastante bueno como para usarlos donde los ABB no garantizan tiempos de bsqueda ptimos. El algoritmo para mantener un rbol AVL equilibrado se basa en reequilibrados locales, de modo que no es necesario explorar todo el rbol despus de cada insercin o borrado.
Los AVL son tambin ABB, de modo que mantienen todas las operaciones que poseen stos. Las nuevas operaciones son las de equilibrar el rbol, pero eso se hace como parte de las operaciones de insertado y borrado.
4.2 Grafos.
Un grafo est formado por un conjunto de nodos(o vrtices) y un conjunto de arcos. Cada arco en un grafo se especifica por un par de nodos. El conjunto de nodos es {A, B, C, D, F, G, H} y el conjunto de arcos {(A, B), (A, D), (A, C), (C, D), (C, F), (E, G), (A, A)} para el siguiente grafo
4.2.1 Terminologa de grafos.
Al nmero de nodos del grafo se le llama orden del grafo. Un grafo nulo es un grafo de orden 0 (cero). Dos nodos son adyacentes si hay un arco que los une. En un grafo dirigido, si A es adyacente de B, no necesariamente B es adyacente de A Camino es una secuencia de uno o ms arcos que conectan dos nodos. Un grafo se denomina conectado cuando existe siempre un camino que une dos nodos cualesquiera y desconectado en caso contrario. Un grafo es completo cuando cada nodo est conectado con todos y cada uno de los nodos restantes. El camino de un nodo as mismo se llama ciclo.
4.2.2 Operaciones bsicas sobre grafos.
En los grafos, como en todas las estructuras de datos, las dos operaciones bsicas son insertar y borrar. En este caso, cada una de ellas se desdobla en dos, para insertar/eliminar vrtices e insertar/eliminar aristas. Insertar vrtice La operacin de insercin de un nuevo vrtice es una operacin muy sencilla, nicamente consiste en aadir una nueva entrada en la tabla de vrtices (estructura de datos que almacena los vrtices) para el nuevo nodo. A partir de ese momento el grafo tendr un vrtice ms, inicialmente aislado, ya que ninguna arista llegar a l. Insertar arista Esta operacin es tambin muy sencilla. Cuando se inserte una nueva arista en el grafo, habr que aadir un nuevo nodo a la lista de adyacencia (lista que almacena los nodos a los que un vrtice puede acceder mediante una arista) del nodo origen, as si se aade la arista (A,C), se deber incluir en la lista de adyacencia de A el vrtice C como nuevo destino. Eliminar vrtice Esta operacin es inversa a la insercin de vrtice. En este caso el procedimiento a realizar es la eliminacin de la tabla de vrtices del vrtice en s. A continuacin habr que eliminar las aristas que tuviesen al vrtice borrado como origen o destino. Eliminar arista Mediante esta operacin se borra un arco del grafo. Para llevar a cabo esta accin es necesario eliminar de la lista de adyacencia del nodo origen el nodo correspondiente al nodo destino. Otras operaciones Las operaciones adicionales que puede incluir un grafo son muy variadas. Adems de las clsicas de bsqueda de un elemento o recorrido del grafo, tambin podemos encontrarnos con ejecucin de algoritmos que busquen caminos ms cortos entre dos vrtices, o recorridos del grafo que ejecuten alguna operacin sobre todos los vrtices visitados, por citar algunas operaciones de las ms usuales.
Resultados
El resultado de esta unidad, fue claramente un aprendizaje detallado y sin tanta palabrera, algo concreto y explicito, para que no haya dudas al momento de transportar del borrador al cdigo lo aprendido. Se podra decir que un rbol binario se define como un conjunto finito de elementos llamados nodos. En estos casos se puede usar terminologa de relaciones familiares para descubrir las relaciones entre los nodos de un rbol; y que un rbol puede ser implementado fcilmente en una computadora. Es bueno hacer nfasis en esto ya que se puede saber mucho sobre lo que tiene que ver con los rboles; entre las cosas que podemos mencionar se encuentra la raz, los nodos de un rbol y la diferencia entre nodos sucesores y nodos terminales, como se muestran en el contenido del trabajo.
Conclusiones Del texto anteriormente redactado, podemos destacar las diferencias que hay entre lo que es un grafo a lo que es un rbol, esto nos ayuda a formar una idea y a llevarlo a la practica con mayor facilidad, tenemos las descripciones de cada una, sus definiciones, y sus caractersticas, para evaluarlas y razonar que tanta diferencia hay entre una y otra. Tambin podemos denotar las diferentes operaciones que se pueden realizar a cabo con estas mismas. Estos conceptos nos ayudaran mucho al querer llegar a la codificacin en el lenguaje del gusto, ser fcil identificar sus partes, y lograr la menor cantidad de errores se sintaxis o ningn error.
Bibliografa
Estructura de Datos en (C). (N) Aron M. Tenenbaum. Yedidyah, Langsam. Moshe A, Augenstein.
Estructura de datos y algoritmos en java. Adam Drozked Thomson 2. Edicin.
Estructura de datos Roman Martinez, Edgar Quiroga. Ciencia e ingenieras.