estructuras de datos.docx

10
Estructuras de Datos http://eduportfolio.org/portfolios/view/ 83629 En la informática, así como se lee en su nombre, es necesario poder procesar información, almacenarla y modificarla. Esta información muchas veces es representada a través de los datos. El dato es el elemento primario de la información y a su vez está formado por símbolos que por sí mismos no tienen valor alguno, pero que al ser unidos con otros símbolos pueden adquirir significado significado. Los datos están conformados por dos tipos: Primitivos Compuestos Los datos primitivos son aquellos más simples, éstos no pueden descomponerse en partes. Ejemplos de tipos de datos podrían ser los enteros, lógicos, caracteres, etc. Los datos compuestos son los tipos de datos cuyas partes, al ser descompuestas, tienen signficado.En esta categoría caben los tipos agregados que son colecciones de elementos de datos. Ejemplos de los tipos agregados pueden ser los arreglos, registros y las cadenas. Exsisten tipos de datos definidos por el usuario y éstos reciben el nombre de clases. Los datos dan paso a un concepto que se utiliza frecuentemente en la informática: las estructuras de datos. “Una estructura de datos es una agregación de tipos de datos compuestos y atómicos en un conjunto con relaciones bien definidas. Una estructura significa un conjunto de reglas que contienen los datos juntos.”(Luis Joyanes Aguilar, 2008, Primera Edición Español, Estructuras de datos en Java, McGraw-Hill, España) ¿Por qué utilizar estructuras de datos? La POO se caracterizar por reutilizar componentes previamente creados, es por eso que se utilizan estructuras de datos. Una vez que una estructura ha sido implementada puede ser utilizada muchas veces para aplicaciones diferentes. En algunos casos necesitaríamos guardar nuestros pasos o acciones para poder regresar sobre ellas o quizás en otro necesitaríamos almacenar datos que dependiendo de su inserción pueden ser procesados, es aquí donde entran las estructuras de datos. Ejemplo de arreglo bidimensional.

Upload: cieloci

Post on 06-Nov-2015

225 views

Category:

Documents


1 download

TRANSCRIPT

Estructuras de Datoshttp://eduportfolio.org/portfolios/view/83629En la informtica, as como se lee en su nombre, es necesario poder procesarinformacin, almacenarla y modificarla. Esta informacin muchas veces es representada a travs de los datos. El dato es el elemento primario de la informacin y a su vez est formado por smbolos que por s mismos no tienen valor alguno, pero que al ser unidos con otros smbolos pueden adquirir significado significado.Los datos estn conformados por dos tipos: Primitivos CompuestosLos datos primitivos son aquellos ms simples, stos no pueden descomponerse en partes. Ejemplos de tipos de datos podran ser losenteros, lgicos, caracteres, etc.Los datos compuestos son los tipos de datos cuyas partes, al ser descompuestas, tienen signficado.En esta categora caben lostipos agregadosque son colecciones de elementos de datos. Ejemplos de los tipos agregados pueden ser losarreglos, registrosy lascadenas.Exsisten tipos de datos definidos por el usuario y stos reciben el nombre declases.Los datos dan paso a un concepto que se utiliza frecuentemente en la informtica: lasestructuras de datos.Una estructura de datos es una agregacin de tipos de datos compuestos y atmicos en un conjunto con relaciones bien definidas. Una estructura significa un conjunto de reglas que contienen los datos juntos.(Luis Joyanes Aguilar, 2008, Primera Edicin Espaol, Estructuras de datos en Java, McGraw-Hill, Espaa)Por qu utilizar estructuras de datos?La POO se caracterizar por reutilizar componentes previamente creados, es por eso que se utilizan estructuras de datos. Una vez que una estructura ha sido implementada puede ser utilizada muchas veces para aplicaciones diferentes. En algunos casos necesitaramos guardar nuestros pasos o acciones para poder regresar sobre ellas o quizs en otro necesitaramos almacenar datos que dependiendo de su insercin pueden ser procesados, es aqu donde entran las estructuras de datos.Ejemplo de arreglo bidimensional.Tipos de estructuras de datos

Existen dos tipos de estructuras de datos segn su forma: Aquellas que son una combinacin de tipos de datos. Las que son una combinacin de otras estructuras de datosAs mismo existen dos tipos de estructuras de datos segn su implementacin: Estticas: este tipo de estructura utiliza un espacio de memoria reservado con anterioridad a la ejecucin del programa, por ende no puede modificarse en su ejecucin. Pero cuenta con la ventaja de ocupar casillas continuas de memoria. Las colas y pilas pueden implementarse de esta manera. Dinmicas: stas no tienen limitaciones en cuanto al uso de la memoria; su implementacin se basa en el uso de los apuntadores.Por ltimo cabe diferenciar las estructuras de datos lineales y las no lineales. Lineales: reciben su nombre por la manera en la que se relacionan los elementos, uno despus de otro. Sus elementos estan organizados en una secuencia lineal. En esta categora estn laspilas, colasylistas. Estructuras de datos no lineales o jerrquicas: se conforman de una manera jerrquica como indica su nombre, o por niveles. Sus nodos pueden estar conectados a ms de un nodo, por ende no son lineales. Losgrafosyrbolesson tipos de estructuras jerrquicas.Pilas

Una pila es una estructura de datos en la cual el acceso est limitado al elemento ms recientemente insertado. Podemos imaginarnos una pila de libros o de platos, su funciomaniento es el mismo. Conceptualmente el ltimo elemento que se agrega a la pila se coloca en su cima, de donde se puede tomar muy fcilmente. Mientras que los elementos que llevan ms tiempo en la pila son ms dificiles de acceder. En un principio los elementos que no estn en la cima son inaccesibles.Las operaciones elementales de un pila soninsertar, eliminar y buscar. Se puede notar qe una pila puede ser utilizda para dar vuelta a una lista de elementos.No se puede eliminar elementos que no estn en la cima.No se pueden insertar elementos que sea sobre la cima.Aplicaciones para las pilas: el gestor de ventana de Windows utiliza una pila para que, al cerrar una ventana, se muestre la anterior; tambin se utilizan pilas para saber que cada parentsis est debidamente unido con otro al momento de realizar operaciones; las pilas son usadas para poder regresar sobre los pasos que se han hecho, por ejemplo para resolver laberintos en inteligencia artificial.Ejemplo visual de una pila.Pila implementada con arreglo:Pila.java(834 o)Pila implementada con listas:Pila.java(753 o)Colas

Dependiendo de la situacin necesitaremos encontrar y eliminar el elementos ms recientemente encontrado, pero en otras situaciones sera la forma errnea de proceder. Es por eso que existen lo que conocemos como colas. Podemos imaginarnos conceptualmente a las colas como las colas de un supermercado o un banco, donde el primer elemento que entra es el prximo en salir y el ltimo elemento espera hasta que la cola se vace para poder ser atendido o salir.Las operaciones bsicas de la cola son: insertar, quitar el primer elemento y acceder al primer elemento.Note que slo se puede insertar en la ltima posicin.Una aplicacin prctica para las colas pueden encontrarse en el sistema de las impresoras, las cuales imprimen el elemento que lleva ms tiempo en su lista de impresn primero y posteriormente siguen con las que llevan menos tiempo.Las colas tambin son utilizadas en la ejecucin de procesos de sistemas operativos como Unix, por ejemplo.Tipos de colas: Circulares: son las que estn implementadas para funcionar de una manera circular o anular, los elementos que salen pueden ser llenados por otros elementos siempre que haya espacio. De Prioridad: son las que dependiendo de la prioridad del elemento pueden colocarse en el primer lugar para que su procesamiento se haga inmediatamente.Ejemplo visual de una cola circular.Cola implementada con lista:Cola.java(1.2 ko)Cola implementada con arreglo:Cola.java(1.6 ko)Cola circular:ColaC.java(1.9 ko)Listas Enlazadas

Las listas enlazadas se caracterizan por almacenar los elementos de una forma no contigua, en su lugar utiliza apuntadores al siguiente espacio de memoria.Los elementos se almacenan en un nodo que contiene el objeto a utilizar y ademas hace referencia al siguiente nodo de la lista. Cuando un nodo hace referencia anulldecimos que es el ltimo elemento.La mayor ventaja de las listas enlazadas es su facilidad de manipulacin al momento de insertar nuevos nodos, y al momento de recorrerlos ya que su recorrido siempre se realiza en tiempo constante.Cabe mencionar que con las listas enlazadas pueden implementarse tanto las colas como las pilas, solo habra que limitar el acceso a los nodos y listo.Las operaciones elementales de las listas son lainsercin, buscar, visitar el primer elemento y eliminar elementos.Dentro de las listas enlazadas existen dos tipos: Listas enlazadassimples: los nodos solamente contienen apuntadores al siguiente nodo.Ejemplo de lista enlazada. Listas enlazadasdobles: los nodos hacen referencia a los nodos siguientes y adems apuntan al nodo anterios.Ejemplo de lista enlazada doble.Clase lista:Lista.java(4.2 ko)rboles

Los rboles son estructuras de datos jerrquicas utilizadas con mucha frecuencia. Los rboles estn formados por un conjunto de nodos y un conjunto de aristas que conectan los dichos nodos.Los rbolos con raz se caracterizan por: Tener un nodo distinguido como raz. Todo nodocest conectado por medio de una arista a un nico nodop. Slo existe un nico camino de la raz a cada nodo.Conceptos importantes: Raz:es el nodo principal de un rbol, de l se desprenden el resto de los nodos. Es el nico nodo que no tiene unpadre. Nodo Padre:son aquellos nodos que hacen referencia a otros nodos. Nodo HIjo:son los nodos referenciados por un mismo padre. Nodo Hoja:son los extremos del rbol, no contienen nodos hijos. Altura:es el mximo numero de niveles de todos los nodos del rbol. Longitud o Nivel:es la cantidad de aristas que se requieren recorrer para llegar a un nodo en particular.Algunas aplicaciones de los rboles se encuentran en los compiladores que crean rboles de sintaxis; tambin se encuentran en algoritmos de compresin como el caso de los jpeg.Las operaciones bsicas de los rboles son:buscar, insertar y borrar.A diferencia de las estructuras anteriores los rboles nos permiten borrar de la posicin que deseemos.Cabe mencionar que los rboles son grafos, pero no todos los grafos son rboles.ABBLos rboles binarios de bsqueda tambin conocidos como ABB son variantes de los rboles que se caracterizan por la cantidad de hijos que contiene cada nodo, que tal como lo dice su nombre binario son dos.Los ABB utilizan los mismos conceptos que un rbol comun.Los ABB estn estructurados de tal manera que dependiendo de el valor que contenga el nodo raz, los nodos hijos estn a la derecha o izquierda de ese nodo; si se agrega un dato con un valor menor al de la raz, ste se agregar como hijo izquierdo del nodo raz; en cambio si se agrega un nodo con un valor mayor a aqul que se encuentra en la raz se agregar al lado derecho del nodo raz. Lo mismo ocurre para los nodos que se agreguen con posterioridad de manera que los ABB toman una estructura particular con gran potencial.Gracias a la conformacin de stos ABB, la utilidad por excelencia de los ABB es su mtodo de bsqueda, el cual reduce el timpo de ejecucin al momento de buscar elementos, hacindolo ms eficiente que otros mtdos de bsqueda.Las operaciones elementales del ABB son las mismas que las de un rbol comn:insertar, borrar, buscar y recorridos.Los recorridos de los rboles son un gran ejemplo del uso de algoritmos recursivos.Slo puede realizarse la insericin en los nodos hoja.Para borrar un nodo hay dos caminos: Referenciar el nodo deseado al nodo con valor ms grande de su rama izquierda y borrar ese nodo. Referencial el nodo deseado al nodo con valor ms bajo de la rama derecha y borrar ese nodo.Ejemplo de un ABB.El ABB consta de tres recorridos fundamentales: Recorrido Pre-Orden(NID): Se visita elNodo. Se realiza el recorrido Pre-Orden por la ramaIzquierda Despus se realiza para la ramaDerecha. Recorrido In-Orden (IND): Se baja por la ramaIzquierday se realiza el recorrido In-Orden. Se visita elNodo. Se reliza el recorrido In-Orden para la ramaDerecha. Recorrido Post-Orden(IDN): Se realiza el recorrido en Post-Orden por la ramaIzquierda. Se realiza el reccorido en Post-Orden por la ramaDerecha. Se visita elNodo.Clase ABB:Arbol.java(9.8 ko)Clase Nodo:Nodo.java(1.3 ko)AVLLos rboles AVL son una versin mejorada de los ABB. Reciben su nombre de sus creadores Andelson-Velskii y Landis.Los AVL cuentan con algo que se conoce comofactor de equilibrio. El factor de equilibrio es la diferencia entre las alturas de los nodos derecho e izquierdo. Para que un AVL se encuentre equilibrado su factor de equilibrio puede ser -1,0 o 1. En caso de que su factor de equilibrio no se encuentre en ese rango se dice que el rbol est desequilibrado, por lo que se hacen las rotaciones pertinentes.Operaciones elementales:borrar, insertar, buscar y rotaciones.Hay que tener en cuenta que una vez que se borra o se inserta un mtodo hay que modificarlo de nuevo para que quede equilibrado.El potencial ms grande de los AVL es su bsqueda, ya que por cada decisin que se toma se elimina un 50% de las opciones.Para borrar un nodo hay dos caminos: Referenciar el nodo deseado al nodo con valor ms grande de su rama izquierda y borrar ese nodo. Referencial el nodo deseado al nodo con valor ms bajo de la rama derecha y borrar ese nodo.Tipos derotaciones: Simples: afectan a dos nodos, el tercero no se modifica y es necesario slo para una rotacin. Dobles: afectan a tres nodos. Consta de dos rotaciones simples.Clase AVL:ArbolAVL.java(6.6 ko)Clase Nodo AVL:NodoAVL.java(626 o)Grafos

Los grafos son estructuras que nos permiten relacionar conexiones entre dos objetos, por eso son binarias. De manera informal podemos decir que es una coleccin de vrtices y aristas que los unen.Definicion formal de un grafo:Un grafo G = (V,E) est formado por un conjunto de vrtices V, y un conjunto de aristas E. Cada arista es un par (v,w), donde v,w pertenece a V. (Mark Allen Weiss, 2000, Primera Edicin Espaol, Estructuras de datos en Java, Pearson, Espaa)Dentro de los grafos existe lo que conocemos comocaminos.Los caminos permiten unir dos nodos a traves de varias aristas. La longitud de un camino, en caso de que el grafo no tenga peso puede considerarse como el numero de aristas que cruza hasta llegar al nodo deseado. En cambio, si el grafo tiene peso o costes, la longitud del camino se determina por la suma de los costes entre aristas que le toma llegar de un nodo a otro.Los grafos pueden ser: Dirigidos: son los grafos formados por aristas con sentido o direccin. No dirigidos: son los grafos en los que se puede moverse en cualquier direccin a travs de las aristas. Mixto: combinacin de grafos dirigidos y grafos no dirigidos.Adems pueden ser: Grafos valorado: son aquellos cuyas aristas tienen un coste o peso. Grafos no valorado: no existe coste entre las aristas.Recorridos: Anchura: este recorrido se lleva a cabo utilizando una cola. Se toma un nodo inicial, se introduce en la cola y sus hijos. Luego se visita el nodo. El proceso se repite hasta que todos los nodos han sido visitados y no se visita un nodo dos veces. Profundidad: en este recorrido se utiliza una pila. Se inicia con un nodo y se visita. Posteriormente se introducen los hijos de dicho nodo y el proceso se repite hasta que todos los nodos no repetidos hayan sido visitados.Los sistemas GPS son una aplicacin prctica para los grafos. Tambin puede utilizarse como una conexin entre personas, a modo de aplicacin en trabajos de investigacin policial.Ejemplo de un grafo.Clase Grafo:Grafo.java(4.1 ko)Representacin de un grafoMatriz de adyacenciaEn la matriz de adyacencia los nodos se ubican tanto en columnas como en filas en el mismo orden. Para cada posicion de la matriz se marca con un 1 si existe una arista entre el nodo de la fila y el nodo de la columna. De no existir arista entre ellos se marca con un 0 la casilla.La matriz de adyacencia tambin puede contener valores distintos a 1 en el caso de que represente un grafo valorado y el valor de 1 es reemplazado por el valor del coste del arco o arista.Ejemplo de una matriz de adyacencia.Lista de adyacenciaLos grafos pueden representarse mediante una listas, en los cuales se unen los elementos que estn unidos en el grafo mediante las aristas. Las listas de adyacencia pueden parecer tediosas puesto que es ms difcil visualizar el grafo, pero cuentan con la ventaja de que el grafo puede verse modificado el momento de agregar algn elemento o borrar ya que su manejo de memoria es dinmico.Matriz de cierre transitivo y cierre transitivoPara encontrar los caminos de cierta longitud, se utiliza la relacion entre la matriz de adyacencia y la matriz de caminos. La matriz de caminos se define como la matriz de adyaciencia eleveda a una potencia n con 0 < n < N, donde N es el numero total de nodos. La matriz de cierre transitivo es aquella que determina en su totalidad la conexin entre nodos, es decir la matriz de adyacencia elevada a la potencia N.Algoritmos

Algoritmo de DjikstraEste algoritmo determina el camino ms corto de un nodo hacia cualquier otro nodo. Se aplica a los grafos valorados. Tiene un enfoque voraz.Este algoritmo inicia con un nodo, partiendo de l se identifica cada arista y su peso. Luego se marca la arista de menor peso y sucede lo mismo para esa arista y el nodo original ya que ste tambin ha sido marcado. El algoritmo contina marcando las aristas de menor peso hasta alcanzar el nodo deseado. En caso de que un peso sea igual al otro ste no se toma en cuenta.Algoritmo RecursivoEs el tipo de algoritmo que resuelve problemas mediantes llamadas a s mismo, es decir recurre a s mismo. Al momento de presentarse la solucin trivial del problema que el algoritmo conoce se llega al caso base de la recursividad, evitando que el algoritmo recurra infinitamente.Ejemplo de una funcin recursiva que calcula el factorial de un numero. Se sabe que el caso base es cuando se calcula el factorial de 0 que es 1 o bien el factorial de 1 que tambin es 1.Algoritmo VorazSe llaman de esta manera porque tienen una aproximacin que se conoce como voraz, que consiste en visitar un elemento una nica vez y dependiendo de lo deseado el elemento se selecciona o se descarta. Por lo general estos elementos son marcados con el fin de llegar a la solucin ptima del problema, es por eso que sus decisiones son basadas en la opcin ms ptima que se puede tomar.Ejemplos de algoritmos voraces: Kruskal, Dijkstra, Prim.