Vous êtes sur la page 1sur 7

Estructura de Datos

1_ Desarrolle las diferencias entre abstraccin de procedimientos y abstraccin de datos Abstraccin de procedimientos: Facilidad que presentan los lenguajes de programacin de Manera que se los programas se puedan dividir en unidades funcionales. Abstraccin de datos: Facilidad mediante la cual en un lenguaje de programacin se pueden Definir nuevos tipos de datos. 2_ Desarrolle el tema "Estructuras en Informtica" Este concepto se utiliza con mayor frecuencia para referirse a las estructuras de datos, sin embargo se aplica tambin a los lenguajes de programacin y en general a las diferentes aplicaciones y sistemas informticos. Estructura en los lenguajes de programacin: Cualquier lenguaje est constituido por un conjunto de elementos (componentes lxicos) que estn regidos mediante normas de sintaxis y semntica propias, todo esto constituye la estructura del lenguaje. Estructuras en los algoritmos: En este caso el concepto de estructura se aplica teniendo en cuenta el tipo de algoritmo: procedimental, orientado a objeto, recursivo; si se desea profundizar adems de la estructura general, entonces se puede analizar las estructuras bsicas dentro de cada mdulo. 3_ Desarrolle las definiciones de Estructura de Datos, Tipo de Dato y Tipo de Dato Abstracto Estructura de datos: Implementacin a la que se llega mediante un nivel adecuado de abstraccin lo que permite caracterizar, almacenar y utilizar una determinada organizacin de datos. En general, se puede considerar una estructura de datos como un conjunto de variables, quiz de tipos distintos, que se relacionan entre s y que se pueden operar como un todo. Tipos de datos: Permite caracterizar una variable al determinar el conjunto de valores que puede tomar. Tipo de datos abstractos: Modelo definidos por el desarrollador, que permiten caracterizar un conjunto de datos y las operaciones que se pueden efectuar con stos. 4_ Desarrolle las caractersticas de las Estructuras de Datos Relaciones entre elementos: establecen la conexin fsica o lgica entre los distintos elementos que componen la estructura. (Precedencia, Jerarqua, Adyacencia). Funciones bsicas para estructuras: Para disponer de una estructura de datos se necesita una serie de algoritmos que ejecuten las tareas fundamentales. (Funciones constructoras, de acceso y destructoras). Operaciones: Sobre una estructura de datos se puede efectuar diferentes tipos de operaciones; Navegar por la estructura, Bsqueda, Consulta de la Informacin, Copia parcial o total, prueba, Modificacion, Insercion,Eliminacion. Estructura de datos con base en la relacin entre los elementos: tener en cuenta el tipo de relacin existente entre los elementos que conforman las estructuras de datos. Lista (Secuencia), rbol (Jerarqua), Red (Adyacencia) 5_ Desarrolle la relacin entre Abstraccin de datos y Programacin Orientada a Objetos Antes de escribir un programa el desarrollador debe tener una idea bastante clara de cmo lograr la tarea que est programando, consecuentemente es fundamental tener un esquema que detalle los requisitos que deben codificarse; mientras ms grande y complejo es el proyecto ms detallado debe ser el esquema. Lo importante es que los detalles de la implementacin deben postergarse, en especial los detalles de las estructuras de datos que se vayan a utilizar. Desde el inicio, debemos preocuparnos ms por lo que el programa debe hacer, no por cmo puede hacerlo. El comportamiento del programa es ms importante que el engranaje del mecanismo para lograrlo; ms tarde, en la etapa de implementacin se decide cul estructura de datos debe utilizarse para hacer la ejecucin ms eficiente en trminos de tiempo y espacio. Un elemento especificado en trminos de las operaciones se llama tipo de dato abstracto. En los lenguajes orientados a objetos un tipo de dato abstracto se llama interface. Las interfaces son parecidas a las clases, pero solamente pueden contener constantes y prototipos de mtodos; es decir las especificaciones de los nombres de los mtodos, los tipos de parmetros y los tipos de valores de regreso. La tarea de definir los mtodos se hace cuando se escribe una clase que implementa la interface. En otras palabras, una interface es como un "contrato", las clases que implementan una interface "se comprometen" a realizar todo lo que la interface especifica. De esta manera los desarrolladores pueden postergar los detalles especficos de implementacin para una etapa posterior del proceso de desarrollo. 6_ Desarrolle los conceptos de asignacin de memoria en Programacin Estructurada y Programacin Orientada a Objetos Para que un programa pueda gestionar la memoria de manera dinmica se utiliza un tipo de dato conocido como puntero o apuntador, cuyo contenido es una direccin de memoria. De esta Estructura de Datos y Programacin Orientada a Objetos manera el desarrollador puede declarar punteros y solicitar al sistema operativo una cantidad de memoria para hacer algo. En la medida que el desarrollador "cuide" esa direccin de memoria podr utilizar la memoria que se le ha asignado. Este mecanismo de programacin, el de utilizar punteros y solicitar memoria al sistema operativo, es muy eficiente pero tambin muy peligroso. Una programacin descuidada agota la memoria del sistema, dado que no "devuelve" las porciones de memoria que

solicita y "pierde" las direcciones. El siguiente esquema muestra un caso tpico. Se trata de un programa, que tiene subprogramas y uno de estos subprogramas declara y utiliza una variable puntero donde guarda la direccin de memoria del bloque solicitado.

El problema se presenta cuando finaliza la ejecucin del subprograma y el desarrollador no tuvo la precaucin de "devolver" la memoria al sistema operativo o en todo caso de pasarla a una variable donde se la pueda seguir accediendo. Cuando el subprograma finaliza, las variables que se crearon en el segmento de pila "desaparecen" y se pierde la direccin del bloque de memoria sin poder acceder al mismo.

Este inconveniente fue solucionado con una tcnica de asignacin de memoria que utiliza lo que se llama heap o montn que es un espacio de memoria de donde se reserva y asigna las solicitudes de los programas. Para el ejemplo anterior, se presenta el bloque de memoria solicitado por el subprograma asignado dentro del heap, que seguramente se halla en un segmento extra.

Cuando el subprograma finaliza su ejecucin, la variable local que apuntaba o referenciaba al bloque de memoria desaparece porque as es como funcionan las variables en el stack. El bloque de memoria queda sin ninguna variable que haga referencia a esa direccin de memoria, aparentemente el problema persiste, solo que este modelo de asignacin de memoria cuenta con un proceso que se llama Garbage Collector (recolector de basura) que inspecciona el heap buscando aquellos bloques de memoria que no son referenciados y libera la memoria. Los lenguajes de programacin orientados a objetos ocultan la utilizacin de punteros, simplemente clasifican o caracterizan a los distintos tipos de datos como Data Type aquellos tipos de datos cuyas variables se almacenan en el stack (clsico modelo de asignacin de memoria) y los Reference Type aquellos tipos de datos que utilizan una variable en el stack (lo que en el modelo no orientado a objetos es el puntero) y una porcin de memoria en el heap (espacio necesario para los objetos de la aplicacin); por supuesto que todos estos lenguajes implementan el Garbage Collector, caso contrario se terminara agotando la memoria del equipo impidiendo la ejecucin del programa. Indudablemente la implementacin del Garbage Collector requiere de caractersticas especiales en el sistema operativo que se ejecuta en el equipo; debe permitir la ejecucin de varios procesos ya sea en paralelo o bajo algn mecanismo de paralelismo aparente. 7_ Desarrolle los conceptos de visibilidad y constructores de la Programacin Orientada a Objetos Visibilidad: se utiliza el trmino visibilidad para tratar con un principio de este paradigma que es conocido como "ocultacin de la informacin", lo que significa que a determinados elementos del interior de una clase no se puede acceder por mtodos externos a la clase. El mecanismo principal para ocultar datos o mtodos es ponerlos dentro de una clase y declararlos "privados", con lo que se est diciendo que a esos elementos solamente se los puede manipular o "ver" desde dentro de la misma clase. Lo contrario sera declararlos "pblicos" con lo cual cualquier mtodo de cualquier clase podra manipularlos. Existen otras posibilidades como por ejemplo declarar que un elemento esta "protegido", con lo cual se logra que desde fuera de la clase nadie pueda acceder al elemento pero se permite que las clases derivadas de esa clase puedan manipular dichos elementos. Constructores: Un constructor es un mtodo que se ejecuta automticamente cuando se crea un objeto de una clase. Un constructor que no tiene parmetros se conoce como "constructor por defecto" y generalmente inicializa los elementos del objeto con valores por defecto. Este constructor no hace falta escribirlo a menos que necesitemos hacer algo en particular, o inicializar los elementos del objeto con determinados valores. Suponiendo que existe una definicin de una clase llamada "Persona", entonces para declarar y crear un objeto

de esta clase se escribe la siguiente sentencia Persona alguien = new Persona(); En este caso "alguien" es una variable cuyo tipo es "Persona" y se crea el objeto mediante el operador "new" invocando el constructor de la clase, en este caso el constructor por defecto. Supongamos que se ha implementado un constructor que permite asignar el nombre de la persona, entonces la sentencia podra ser: Persona alguien = new Persona("Juan"); Ahora el constructor recibe un parmetro, consecuentemente no es el constructor por defecto (que no hace falta implementar). Destructores: El destructor es un mtodo que en general no hace falta implementar, se supone que el recolector de basura busca las porciones de memoria en el "heap" que no estn referenciadas y las libera. 8_ Desarrolle los conceptos referentes a Arreglos, su comportamiento y una alternativa de comportamiento. Clasifique desde el punto de vista de la Estructura de Datos. Arreglo: Se trata de una coleccin de elementos homognea (o sea del mismo tipo) a los que se tiene acceso por medio de uno o ms ndices. Con lo que nos queda claro que el comportamiento de un arreglo, es simplemente eso acceder a los elementos que estn dentro del arreglo indicando su posicin. Este comportamiento, es bsico; lo mnimo que se puede hacer con un arreglo y justamente es el comportamiento que los lenguajes de programacin (cualquier modalidad) nos brindan. Comportamiento Alternativo: El comportamiento implementado es funcionalmente mucho mejor que el que brinda un arreglo comn y esto es porque se trata de la implementacin de un tipo de dato abstracto conocido como Lista en Secuencia. Para operar con el arreglo es necesario siempre conocer la cantidad e elementos del mismo, esto se poda solucionar usando un registro y dentro de este el arreglo y el entero N que indica la cantidad de elementos. Contar con una definicin de objetos que nos brinda la posibilidad de automticamente controlar la cantidad de elementos vlidos dentro del arreglo y adems redimensionar el arreglo cuando sea necesario es una herramienta fabulosa, que adems incorpora comportamiento para ordenar los elementos, insertar elementos nuevos o duplicados, remover el que se desee, buscar, etc. 9_ Desarrolle el concepto de Lista Almacenada en Secuencia y Lista Encadenada, describa las operaciones bsicas con listas Lista: El TDA Lista es una coleccin de elementos de manera que se puede acceder a uno de ellos desde el elemento anterior (salvo el primer elemento); consecuentemente el comportamiento u operacin que caracteriza a una lista es justamente que se pueda acceder a un elemento a partir del elemento anterior. El caso del primer elemento es particular y se considera en su implementacin (realizacin de la estructura de datos correspondiente). Las listas se pueden clasificar por diferentes aspectos como ser: Conformacin Forma de almacenamiento Forma de acceso De acuerdo con su conformacin las listas se pueden clasificar en lineales y no lineales. Una lista lineal es aquella en la que cualquiera de sus elementos tiene un nico inmediato sucesor y un nico inmediato antecesor, excepto el primero y el ltimo elemento. Caso contrario se considera que es una lista No Lineal. Tambin de acuerdo con su conformacin las listas pueden clasificarse como listas de tipo abierto, aquellas en las que el ltimo elemento de la lista no tiene sucesor, generalmente hay un indicador para determinar el final de la lista, y listas de tipo cerrado, que son circulares debido a que el ltimo elemento permite acceder al primero. Listas almacenadas en secuencia: son las listas que se caracterizan porque la posicin de almacenamiento de cualquier elemento es igual a la posicin del anterior ms el tamao del elemento anterior, lo que implica un espacio de almacenamiento contiguo para la lista. El trmino "secuencia" hace referencia a la forma en que se asigna el espacio (memoria) de almacenamiento de la estructura de datos.

Lista encadenada: los elementos se encuentran dispersos en el medio de almacenamiento pero cada uno de ellos contiene un apuntador o enlace que indica la posicin del siguiente elemento. En este caso, existe una "cabeza" o punto de entrada que puede ser el primer elemento perteneciente a la lista o simplemente un apuntador o enlace al primer elemento de la lista.

Operaciones con listas: En una lista se pueden efectuar operaciones que se implementan normalmente por medio de algoritmos que se deben desarrollar de acuerdo con el tipo de lista, y en el caso de los lenguajes orientados a objetos es posible hallar las declaraciones de clases en las libreras del lenguaje. A continuacin se enumeran las operaciones bsicas que se pueden efectuar sobre una lista: Agregar un elemento a la lista, Eliminar un elemento de la lista, Recorrer la lista, Cambiar el contenido de un elemento, Determinar el nmero de elementos de la lista, Buscar un elemento con determinada informacin, Copiar una lista, Ordenar los elementos de acuerdo con el valor contenido en los elementos, Unir varias listas, Partir una lista en varias listas 10_ Desarrolle el Tipo de Dato Abstracto "Pila" como una lista su clasificacin y operaciones Lista de pila almacenada en secuencia: Es una lista lineal que se almacena en una serie sucesiva, continua, de celdas en la que se tiene acceso a un extremo de la lista y por tanto la consulta, las inserciones y las eliminaciones se llevan a cabo slo por ese extremo. Con base en su funcionamiento, recibe el nombre de lista de tipo LIFO (Last In, First Out), lo que significa que el ltimo elemento en entrar es el primero en salir; tambin se denomina lista de Stack. Esta lista requiere para su implementacin un solo punto de acceso, el que sirve para indicar cul elemento de la lista es al que se tiene acceso. Operaciones: En una lista de pila se puede realizar las siguientes operaciones bsicas; Agregar elementos, Extraer elementos, Consulta del elemento que se encuentra listo para ser extrado, Estado para determinar si est vaca, llena o normal. 11_ Desarrolle el Tipo de Dato Abstracto "Cola" como una lista su clasificacin y operaciones Lista de cola almacenada en secuencia: Es una lista lineal que se almacena en una serie continua de celdas en las que se puede agregar elementos por un extremo y extraer por el otro extremo de la lista; debido a esta forma de funcionamiento se conoce como lista FIFO (First In, First Out), lo que equivale a que el primer elemento que entra en la lista de cola es el primero que sale de ella. Tambin se denomina lista de Queue. Para la implementacin de la lista de cola se requieren dos puntos de acceso (para cada extremo), uno para la cabeza o primer elemento que es por donde se efectan las extracciones y el otro para el ltimo elemento que es por donde se efectan las agregaciones. Operaciones: En una lista secuencial de cola se pueden realizar las siguientes operaciones bsicas: Agregar elementos, Extraer elementos, Consulta del elemento que se encuentra listo para ser extrado, Estado para determinar si est vaca, llena o normal. 12_ Desarrolle los problemas y soluciones en la implementacin de una "Cola Circular" Al principio, cuando el arreglo est vaco se puede fijar "head igual tail", de manera que al agregar un elemento se lo ubica en la posicin indicada por "tail" y luego se "avanza" ese ndice. Para retirar el elemento se toma de la posicin indicada por "head" y luego se "avanza" ese ndice, de manera que cuando se cumpla que "head es igual tail" la cola est vaca. De acuerdo a lo expresado, para agregar un elemento se lo pone en el lugar indicado por "tail" y luego se "avanza" este ndice. Cuando esto suceda tendremos que "head es igual tail" y la cola est llena. De manera que cuando "head es igual a tail" la cola est vaca o est llena. Tenemos dos alternativas para saber en qu situacin estamos: 1) Utilizar un variable que cuente los elementos que se agregan y descuenta cuando se extraen. 2) Desperdiciar ese ltimo lugar disponible y decir que la cola est llena cuando "el siguiente de tail es igual a head". La primera de las implementaciones se conoce como cola que prioriza la memoria, esto significa que utiliza toda la memoria que le fue asignada y la segunda de las implementaciones se conoce como cola que prioriza la velocidad porque no necesita incrementar y decrementar una variable que cuenta los elementos dentro de la cola y consecuentemente funciona ms rpido. Esta ltima apreciacin es vlida para productos de software empotrados o en los lenguajes no orientados a objetos. 13_ Desarrolle ventajas y desventajas del manejo dinmico de memoria Manejo dinmico de memoria: El manejo dinmico de memoria es una caracterstica que proveen los lenguajes de programacin de manera que en tiempo de ejecucin el usuario puede disponer de ms memoria o devolver la que no est utilizando. En las listas encadenadas, debido a que el sucesor inmediato de un elemento no necesariamente se encuentra fsicamente a continuacin de ste, se les puede suministrar la memoria de forma dinmica, es decir a medida que se va necesitando. Consecuentemente cada elemento necesita de un "enlace" para almacenar la direccin donde se encuentra el siguiente elemento. 14_ Desarrolle la Estructura de Datos "Nodo" En los lenguajes no orientados a objetos, este "enlace" se implementa como un puntero y en los lenguajes orientados a objetos este "enlace" recibe el nombre de "referencia". En ambos casos existe el concepto de una estructura de datos conocida como "nodo" que resulta ser un registro (en los lenguajes no orientados a

objetos) o un objeto (en los lenguajes orientados a objetos) que consta esencialmente de dos partes, una de ellas informacin o datos y la otra enlaces (al menos uno). Cada vez que hace falta implementar una lista de lo que sea que el cliente quiera se debe declarar la estructura interna del nodo dado que ah es donde estn los datos. Esto nos puede llegar a volver locos, adems es inmanejable la cantidad de declaraciones de nodo que podramos llegar a tener en una aplicacin. 15_ Desarrolle la Estructura de Datos "Lista" operaciones, variantes, performance Una lista se utiliza para almacenar informacin de mismo tipo, con la caracterstica de que puede contener un nmero indeterminado de elementos (mientras haya memoria) y que estos elementos mantienen un orden explcito (al menos el de la forma en que se introducen en la lista). Este ordenamiento explicito implica que cada elemento mantiene un enlace al siguiente elemento. Una lista es una estructura de datos dinmica, el nmero de elementos en la lista puede variar rpidamente en un proceso, aumentando por agregaciones o disminuyendo por extracciones. Las agregaciones se pueden realizar por cualquier punto de la lista; por la cabeza (inicio), por el final (cola), a partir o antes de un elemento determinado de la lista. Las extracciones tambin se pueden realizar en cualquier punto; adems se extraen elementos dependiendo del valor de un atributo del elemento mismo. Agregacin: Una de las formas en que se puede agregar un elemento por la cabeza (head) de la lista. Obviamente si la lista est vaca ese elemento se pone en un nodo y este nodo es el primero y nico en la lista. En este caso se debe cambiar la referencia "Head" de manera que "apunte" al nuevo nodo que contendr al elemento. Otra posibilidad es agregar al final de la lista, para ello (cuando la lista no est vaca) se debe recorrer la misma hasta llegar al final de la misma; eso se determina porque el enlace el ltimo nodo tiene el valor "null". Para eso se utiliza una referencia "Skip" que comienza al principio de la lista y la recorre pasando de un nodo a otro hasta que encuentre el ltimo (aquel cuyo enlace sea igual a null), entonces se procede a "enganchar" el nuevo nodo que contiene al elemento. Ac ya se observa un problema de performance para cuando la lista tenga un nmero considerable de nodos. Otra situacin en la que se puede querer agregar un elemento es entre dos nodos dados, por ejemplo el nodo "A" y el nodo "B"; en este caso primero hace falta encontrar el "lugar" donde se debe realizar la agregacin, esto significa recorrer la lista que buscar de alguna manera la posicin adecuada. Se debe tener la precaucin de mantener la referencia Skip "apuntando" al nodo anterior al lugar donde se realizar la agregacin, caso contrario sera imposible. Extraccin: La extraccin de elementos se puede realizar solamente si la lista no est vaca en cuyo caso se debe provocar una excepcin dado que es responsabilidad de quin usa la lista controlar que tenga elementos para extraer. Una posibilidad es extraer el primer elemento de la lista, el que se encuentra en la cabeza o Head; Una vez localizado el elemento que se va a extraer, recordemos que el elemento es Item y est dentro de un nodo que en este caso es el primero de la lista, se debe tomar su valor para devolverlo. El proceso de extraccin se define para extraer elementos no nodos de manera que se debe devolver el elemento no el nodo. Otra posibilidad es extraer el ltimo elemento de la lista, para ello hace falta recorrer la lista cuidando de llegar hasta el penltimo nodo, si se apunta al ltimo nodo no se puede realizar la desconexin dado que el nodo anterior (el penltimo) es el que mantiene el enlace. 16_ Desarrolle la Estructura de Datos "Lista Doble" operaciones, variantes, performance Listas encadenadas de doble enlace: Como se coment en la publicacin sobre listas enlazadas (las que podemos denominar simples), solucionan la implementacin de bastante comportamiento de situaciones reales que pueden sistematizarse en ambientes computarizados; sin embargo hay problemas de performance que en principio se solucionan con una implementacin que cuenta en su estructura interna con enlaces a la cabeza (head) y cola (tail) de la lista, pero a la hora de extraer el ltimo elemento de la lista, los problemas persisten. Una solucin es implementar la estructura interna del nodo de manera que presente enlaces al siguiente nodo y tambin al nodo anterior, esto complica el cdigo (se debe ser muy cuidadoso en su implementacin) pero brinda un nivel aceptable de performance que puede ser exigencia en ciertas aplicaciones. Operaciones: En una lista doble se pueden realizar las siguientes operaciones bsicas: Agregar elementos (Al principio, al final o en cualquier posicin), Buscar un elemento, Borrar elementos Al principio, al final o en cualquier posicin), Recorrer la lista. 17_ Desarrolle Tipos de Datos Abstractos con acceso restringido mediante "listas enlazadas" Pilas y colas implementadas con listas: Una de las posibilidades que brinda la lista enlazada es que con ella se puede implementar el comportamiento de listas de acceso restringido como son la pila (Stack) o la cola Queue). Pila implementada con lista: Para implementar una pila basta con utilizar una lista en la estructura interna de la misma y utilizar los mtodos que permiten agregar y extraer por la cabeza de la lista; de ese modo se implementa el comportamiento LIFO que las pilas tienen. Cola implementada con lista: Una cola implementada con un lista tambin mantienen en su estructura interna un objeto del tipo lista y el comportamiento FIFO se logra agregando por final y extrayendo por la cabeza de la lista. 18_ Desarrolle los requerimientos de una "Lista Ordenada" Lista ordenada: Es bastante comn hallar en la vida real que los procesos implementan una especie de "turno" o "nmero" que indica el orden en que se realizaran las cosas; tal es el caso de como atienden algunos odontlogos o por ejemplo como se prioriza algn servicio de acuerdo a un valor. La situacin planteada se puede resolver con lo que se conoce como una lista ordenada, que no es otra cosa que una lista encadena en la

que los elementos se agregan respetando un orden determinado, de manera que siempre se acceda a la lista desde el principio hasta el fin se podr acceder a los elementos en dicho orden sin importar como fueron agregados a la lista. La cuestin es que un objeto del tipo lista sabe cmo tiene que mantener ordenados a los elementos, esto no es nada complicado dado que ya se cuenta con mtodos para agregar elementos donde sea necesario, al principio, al final y antes o despus de algn lugar en particular; el problema es que la lista no sabe cuando un elemento es mayor o menor que otro elemento. Es correcto, la lista no debe saber cuando un elemento es mayor o menor que otro elemento; si lo hiciera estara violando el encapsulamiento de los objetos del tipo ELEMENT adems como la implementacin es genrica nadie puede saber a priori cuando uno de esos elementos es mayor o menor que otro. Esta capacidad (comportamiento) saber cuando un objeto es mayor o menor que otro del mismo tipo debe implementarse en el objeto mismo y la lista debe utilizar algn mensaje que le indique cuando un objeto es mayor o menor que otro. La interface IComparable: Claramente se ha establecido que hace falta un comportamiento que indique cuando un objeto es mayor, menor o igual que otro objeto obviamente del mismo tipo (no se compara peras con manzanas). Eso es un contrato de comportamiento y en C# se conoce como la interface IComparable. Lo que nos dice es que para que un objeto de cualquier tipo pueda saber si es mayor, menor o igual que otro del mismo tipo, debe implementar un mtodo int CompareTo(object obj) que devuelve un nmero entero cuyo significado es el siguiente: mayor que cero el objeto que ejecuta el mensaje es mayor que el objeto parmetro. menor que cero el objeto que ejecuta el mensaje es menor que el objeto parmetro. igual a cero objeto que ejecuta el mensaje es igual que el objeto parmetro. 19_ Desarrolle los conceptos del Tipo de Dato Abstracto "rbol" y "rbol Binario" rbol: De manera intuitiva, el concepto de rbol implica una estructura en la que los datos se organizan de modo que los elementos de informacin estn relacionados entre s a travs de ramas. Un rbol consta de un conjunto finito de elementos, llamados nodos y de un conjunto finito de lneas dirigidas, llamadas ramas que conectan los nodos. Un rbol es un conjunto de uno o ms nodos tales que: hay un nodo especial llamado raz y los restantes se dividen en n 0 conjuntos disjuntos tal que cada uno de estos conjuntos es un rbol y se los conoce como subrboles. Terminologa: Adems del nodo raz, existen muchos trminos utilizados en la descripcin de los atributos de un rbol, por ejemplo un nodo que tiene sub-rboles se conoce como padre de ellos, y los nodos sucesores se llaman hijos. De este modo los hijos de un nodo y los hijos de estos se denominan descendientes as como el padre y los abuelos se conocen como ascendientes. Los nodos del mismo padre suelen llamarse hermanos y los nodos que no tienen descendientes se conocen como hojas. Se define nivel de un nodo a la distancia que ese nodo tiene al nodo raz, consecuente la raz tiene nivel igual cero. Un camino es una secuencia de nodos en los que cada nodo es adyacente al siguiente. Cada nodo del rbol puede ser alcanzado siguiendo un nico camino que comienza en el nodo raz. La altura o profundidad de un rbol es el nivel de la hoja del camino ms largo desde la raz ms uno. Por definicin la altura de un rbol vaci es cero. Un rbol se divide en subrboles, que es cualquier estructura conectada por debajo del nodo raz. Cada nodo de un rbol es la raz de un subrbol que se define por el nodo y todos sus descendientes. rboles binarios: Un rbol binario es un rbol cuyos nodos no pueden tener ms de dos sub-rboles. En un rbol binario, cada nodo puede tener cero, uno o dos hijos. Se conocen como el nodo de la izquierda y el nodo de la derecha; obviamente esos nodos pueden ser la raz de sub-rboles (binarios tambin) de manera recursiva. En cualquier nivel "n", un rbol binario puede contener de 1 a 2n nodos. El nmero de nodos por nivel contribuye a la densidad del rbol. rbol binario completo: Un rbol binario completo de profundidad n es un rbol en el que para cada nivel desde el 0 al n-1 tiene un conjunto lleno de nodos, y todos los nodos hoja a nivel n ocupan las posiciones ms a la izquierda del rbol. Un rbol binario completo que contienen 2n nodos a nivel n es un rbol lleno. Un rbol lleno es un rbol binario que tiene el mximo nmero de entradas para su altura. Esto sucede cuando el ltimo nivel est lleno. Recorrido de un rbol binario Dado que un rbol binario en cualquiera de sus nodos presenta tres elementos, la raz del rbol o subrbol, el subrbol izquierdo y el subrbol derecho; es posible recorrer un rbol binario al menos de tres formas posibles, todo depende de en qu momento se procesa o "visita" la raz del nodo en cuestin. De este modo diremos que se puede recorrer un rbol binario Pre Orden - Se procesa la raz, el subrbol izquierdo, el subrbol derecho En Orden - Se procesa el subrbol izquierdo, la raz, el subrbol derecho Post Orden - Se procesa el subrbol izquierdo, el subrbol derecho, la raz. Las implementacin ms sencillas para realizar este comportamiento son recursivas, pero se debe tener en cuenta que pueden consumir muchsima memoria (en los sucesivos llamados) de modo que tambin existen implementaciones iterativas que son ms complicadas de analizar y suelen requerir de otras estructuras de datos (por ejemplo pilas) para su implementacin. 20_ Desarrolle el concepto de Tipo de Dato Abstracto "rbol Binario de Bsqueda", operaciones, tcnicas y performance rbol Binario de Bsqueda: Un rbol binario que tiene los nodos ordenados de alguna manera se conoce como rbol Binario de Bsqueda por que justamente al estar ordenado se puede buscar aplicando el criterio de bsqueda binaria similar al utilizado con arreglos. Un rbol binario de bsqueda es aquel en que, dado un nodo, todos los datos del subrbol izquierdo son menores que los datos de ese nodo, mientras que todos los datos del subrbol derecho son mayores (o iguales) que sus propios datos. Al existir un criterio de orden, es posible implementar el comportamiento: Agregar y Extraer elementos de un rbol binario de bsqueda; dado que de acuerdo al valor del elemento, es posible encontrar el lugar o ubicacin

en el rbol donde debe estar el nodo que contiene a dicho elemento. Obviamente un rbol binario de bsqueda es un rbol binario lo que nos est indicando que no hay que realizar otra implementacin, simplemente se puede heredar todo lo que un rbol binario tiene y en esta sub clase implementar el nuevo comportamiento, que sern (en un principio) los mtodos para agregar y extraer elementos del rbol. Para agregar elementos en un rbol binario de bsqueda en primer lugar se debe hallar el lugar donde el elemento debe ubicarse y luego crear un nodo que lo contenga. La forma de buscar un lugar o valor en un rbol binario de bsqueda es justamente aplicando la tcnica de bsqueda binaria; esto quiere decir que se compara el valor a buscar con el valor del nodo raz, si lo que se busca es menor entonces se debe procesar el subrbol izquierdo, si lo que se busca es mayor o igual entonces se debe procesar el subrbol derecho. Como en este caso estamos buscando un lugar y no un valor puntual (que no es lo mismo) el proceso indicado en el prrafo anterior se realiza hasta que no hay subrbol lo que indica que se encontr el lugar que le corresponde al valor que se desea agregar. 21_ Desarrolle el concepto de Tipo de Dato Abstracto "rbol Equilibrado o Balanceado", operaciones, tcnicas y performance Existe una definicin de rbol perfectamente balanceado, que dice: "un rbol perfectamente balanceado es aquel en el que para cada nodo el nmero de nodos en sus subrboles derecho e izquierdo difieren como mximo en uno". Esta es la mxima expresin del equilibrio, sin embargo el costo (en procesamiento) para mantener este tipo de rboles es demasiado por ello la industria acepta y opera con el concepto de rbol equilibrado, en el que para cada nodo las alturas de los subrboles derecho e izquierdo difieren en no ms de uno en valor absoluto.

rbol AVL Un rbol AVL es aquel en el que para cada nodo las alturas de los sub-rboles derecho e izquierdo difieren en no ms de uno en valor absoluto. Indudablemente se trata de un tipo de dato abstracto cuya implementacin se logra mediante un rbol binario de bsqueda, en el que se modifica el comportamiento para agregar y extraer elementos asegurando que la diferencia de altura entre los sub-rboles derecho e izquierdo de cada nodo no sea mayor a uno en valor absoluto. Para asegurar que la diferencia de altura entre los sub-rboles de cada nodo no sea mayor a uno en valor absoluto es necesario "reorganizar" la forma del rbol binario de bsqueda despus de agregar o extraer un nodo que provoque un cambio en las alturas de alguno de los sub-rboles.

Vous aimerez peut-être aussi