Вы находитесь на странице: 1из 14

Tipo de Datos Abstractos(TDAs,ADTs,TADs)

Tipos de TDAs 1. Listas 2. Pilas 3. Colas 4. Conjuntos 5. Tablas de Dispersin Definicin Estructura Datos Cada uno de los posibles modelos matemticos o lgicos en que puede organizarse un conjunto de datos determinado El modelo suele llevar implcito ciertas operaciones de acceso o de bsqueda Clasificacin de las Estructuras Estructuras Estticas El numero de componentes es fijo. Estructuras Dinmicas El numero de componentes varia durante la ejecucin del programa ya que se pueden crear y destruir las variables durante el desarrollo del mismo. Estructura de Datos = Tipo de Datos? Tipo de Dato Un tipo de dato, en un lenguaje de programacin, define un conjunto de valores que una determinada variable puede tomar, as como las operaciones bsicas sobre dicho conjunto. Estructuras de Datos Las estructuras de datos son colecciones de variables, no necesariamente del mismo tipo, relacionadas entre s de alguna forma. Las estructuras de datos estn caracterizadas por el tipo de dato de los elementos guardados en la estructura y por la relacin definida sobre estos elementos.

TDA Definicin

TDA General Consta de datos ( estructuras de datos propias) y operaciones que se pueden realizar sobre esos datos

TDA Ambiente JAVA

El TDA se define en 2 pasos

Interfaz JAVA para un TDA Se usa solo para herencia ( incluida la gerencia mltiple) No tiene estado La mejor forma de escribir en JAVA un TDA es con una interfaz Una interfaz en Java es una coleccin de mtodos abstractos y propiedades. En ellas se especifica qu se debe hacer pero no su implementacin. Sern las clases que implementen estas interfaces las que describan la logica del comportamiento de los mtodos. Ventajas de los TDAs Mejoran la conceptualizacin y hacen ms claro y comprensible el cdigo. Hacen que el sistema sea ms robusto. Reducen el tiempo de compilacin. Permiten modificar la implementacin sin que afecte al interfaz pblico. Facilitan la extensibilidad. Encapsulamiento Se dice que la clase encapsula el tipo de datos junto a sus operaciones ocultando los detalles internos. Consiguen la reutilizacin de cdigo para diversas operaciones. TDA Cuando se usa en un programa de computacin, un TDA es representado por su interfaz, la cual sirve como cubierta a la correspondiente implementacin. La idea es que los usuarios de un TDA tengan que preocuparse slo por la interfaz, pero no por la implementacin La solidez de un TDA reposa en la idea de que la implementacin est escondida al usuario. Solo la interfaz es pblica. Esto significa que el TDA puede ser implementado de diferentes formas, pero mientras se mantenga consistente con la interfaz, los programas que lo usan no se ven afectados.

TDA PILA Estructura de datos en la que todas las inserciones y eliminaciones de elementos se realizan en un extremo denominado Tope (cima) de la Pila. El ltimo elemento agregado es el primero en salir de la pila (LIFO = Last Input First Output) Ejemplo Grfico

Operaciones Bsicas getSize(); //Devuelve el nmero de elementos de la pila isEmpty(); //true si la pila est vaca top(); //Elemento del tope de la pila push(Object element); //Apila un elemento en el tope de la pila pop(); //Desapila el elemento que est en el tope de la pila y lo retorna

El TDA Lista Definicin Lista Enlazada Formada por una coleccin de nodos, los cuales almacenan dos valores: un valor de la lista y un puntero o referencia que indica la posicin del nodo que contiene el siguiente valor de la lista Es necesario almacenar al menos la posicin del primer elemento Es dinmica, su tamao puede cambiar durante la ejecucin del programa Tipos de Listas

Estructura de un Nodo Cada elemento (nodo) de una lista enlazada debe tener dos campos: Un campo info que contiene el valor de ese elemento. Un campo enlace puntero que indica la posicin del siguiente elemento Lista Enlazada

Caractersticas Una lista es una secuencia de 0..n elementos Todos los elementos son del mismo tipo A la lista de 0 elementos llamaremos lista vaca Cada elemento de la lista se llama nodo Operaciones Bsicas getSize(); // Devuelve el nmero de elementos en la lista anular(); //Elimina toda la lista isEmpty(); // true si la lista est vaca posicion(Object elemento); //devuelve la posicion de un elemento en la lista insertar (Object elemento); // Agrega un elemento a la lista en forma secuencial

insertarOrdenado(Object elemento); // Agrega un elemento a la lista en forma ordenada suprimir(Object elemento); //Suprime un elemento de la lista existe(Object elemento); //true si el elemento existe en la lista primero(); //Devuelve el primer elemento de la lista ultimo(); //Devuelve el ltimo elemento de la lista Inserciones y Supresiones 1. Al Inicio de la lista 2. En medio 3. Al Final

Ventajas Los elementos se pueden insertar en una lista indefinidamente mientras que un array tarde o temprano se llenar necesitar ser redimensionado, una costosa operacin que incluso puede no ser posible si la memoria se encuentra fragmentada. Desventajas Las listas enlazadas slo permiten acceso secuencial a los elementos. Las listas enlazadas simples, de hecho, solo pueden ser recorridas en una direccin. Esto hace que las listas sean inadecuadas para aquellos casos en los que es til buscar un elementos por su ndice rpidamente Lista Doblemente Enlazada Un tipo de lista enlazada ms sofisticado es la lista doblemente enlazada o lista enlazadas de dos vas. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor NULL si es el primer nodo; y otro que apunta al nodo siguiente, o apunta al valor NULL si es el ltimo nodo.

Lista Enlazada Circular En una lista enlazada circular, el primer y el ltimo nodo estn unidos juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier direccin hasta que se regrese hasta el nodo original. Desde otro punto de vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de listas es el ms usado para dirigir buffers para ingerir datos, y para visitar todos los nodos de una lista a partir de uno dado.

Lista Enlazada Doblemente Circular En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta al ltimo y el enlace siguiente del ltimo nodo, apunta al primero. Como en una lista doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier punto con acceso a algn nodo cercano. Aunque estructuralmente una lista circular doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede establecer el nodo apuntado que est en la cabeza o al nodo cola, y as mantener el orden tan bien como en una lista doblemente enlazada.

TDA Cola
Definicin Una cola es un caso particular de lista en el cual los elementos se insertan en un extremo (el posterior o final) y se suprimen en el otro (el anterior o frente). Las colas se conocen tambin como listas FIFO(first-in first-out) o listas primero en entrar, primero en salir. Algunas de las operaciones vistas para listas pierden sentido en el TDA Cola y se definen nuevas operaciones.

Operaciones TDA Cola getSize(); // devuelve el nmero de elementos en la cola Anular(); //elimina / inicializa la Cola isEmpty(); // true si la Cola est vaca posicion(Object elemento); //devuelve la posicion de un elemento en la Cola encolar(Object elemento); // encola un elemento por el extremo posterior(final) de la cola desencolar(); //suprime el elemento que est en la parte anterior(frente/inicio) de la cola existe(Object elemento); //true si el elemento fue encolado frente(); //devuelve el elemento que est en el frente/inicio de la Cola Modalidades

Bicola o Dicola La bicola o doble cola es un tipo de cola especial que permiten la insercin y eliminacin de elementos de ambos extremos de la cola. Puede representarse a partir de un vector y dos ndices, siendo su representacin ms frecuente una lista circular doblemente enlazada. Todas las operaciones de este tipo de datos tienen coste constante. Colas de Prioridad El TAD cola de prioridad es un tipo de datos que ha de permitir, al menos, las dos siguientes operaciones; insertar y eliminar el de menor prioridad. La operacin de insertar tiene su significado habitual, es decir, se inserta como ultimo elemento de todos los que tengan la misma prioridad, mientras que eliminar es especial pues que ha de eliminar siempre el primero de entre los que tengan menor prioridad. A diferencia de las pilas y las colas, en las colas de prioridad se pueden sacar los elementos que no estn en el primer sitio del extremo donde salen los elementos. Esto es porque el elemento a retirar puede estar en cualquier parte del arreglo. Cuando se requiere eliminar un dato de una cola de prioridad se necesita verificar cada uno de los elementos almacenados para saber cul es el menor (o el mayor). Esto conlleva algunos problemas, el principal problema es que el tiempo necesario para eliminar un elemento puede crecer tanto como elementos tenga la cola. Mtodos Bsicas Existen dos mtodos bsicos para la representacin de colas de prioridad mediante estructuras lineales: Tener la cola siempre ordenada de acuerdo a las prioridades de sus elementos, y sacar cada vez el primer elemento de sta, es decir, el de mayor prioridad. En este caso, cuando se introduce un elemento en la cola, debe insertarse en el lugar correspondiente de acuerdo a su prioridad. Insertar los elementos siempre al final de la cola, y cuando se va a sacar un elemento, buscar el que tiene mayor prioridad.

TDA Grafo
El origen de la palabra grafo es griego y su significado etimolgico es "trazar". Aparece con gran frecuencia como respuesta a problemas de la vida cotidiana. Ejemplos Un grfico de una serie de tareas a realizar indicando su secuenciacin (un organigrama). Grafos matemticos que representan las relaciones binarias. Una red de carreteras. La red de enlaces ferroviarios o areos. La red elctrica de una ciudad. Grafos

TDA GRAFO Se podra deducir que un grafo es bsicamente un objeto geomtrico aunque en realidad sea un objeto combinatorio, es decir, un conjunto de puntos y un conjunto de lneas tomado de entre el conjunto de lneas que une cada par de vrtices. Por otro lado, y debido a su generalidad y a la gran diversidad de formas que pueden usarse, resulta complejo tratar con todas las ideas relacionadas con un grafo. Un grafo consta de vrtices (o nodos) y aristas. Los vrtices son objetos que contienen informacin y las aristas son conexiones entre vrtices. Para representarlos, se suelen utilizar puntos para los vrtices y lneas para las conexiones, aunque hay que recordar siempre que la definicin de un grafo no depende de su representacin. Los grafos son estructuras de datos no lineales que tienen una naturaleza generalmente dinmica. Su estudio podra dividirse en dos grandes bloques: Grafos Dirigidos. Grafos no Dirigidos(pueden ser considerados un caso particular de los anteriores). Un ejemplo de grafo dirigido lo constituye la red de aguas de una ciudad ya que cada tubera slo admite que el agua la recorra en un nico sentido. Por el contrario, la red de carreteras de un pas representa en general un grafo no dirigido, puesto que una misma carretera puede ser recorrida en ambos sentidos. No obstante, podemos dar unas definiciones generales para ambos tipos.

Una caracterstica especial en los grafos es que podemos representarlos utilizando dos estructuras de datos distintas. En los algoritmos que se aplican sobre ellos veremos que adoptarn tiempos distintos dependiendo de la forma de representacin elegida. En particular, los tiempos de ejecucin variarn en funcin del nmero de vrtices y el de aristas, por lo que la utilizacin de una representacin u otra depender en gran medida de si el grafo es denso o disperso. Es la forma ms comn de representacin y la ms directa. Consiste en una tabla de tamao V x V, en que la que a[i][j] tendr como valor 1 si existe una arista del nodo i al nodo j. En caso contrario, el valor ser 0. Cuando se trata de grafos ponderados en lugar de 1 el valor que tomar ser el peso de la arista. Si el grafo es no dirigido hay que asegurarse de que se marca con un 1 (o con el peso) tanto la entrada a[i][j] como la entrada a[j][i], puesto que se puede recorrer en ambos sentidos. Como se puede apreciar, la matriz de adyacencia siempre ocupa un espacio de V*V, es decir, depende solamente del nmero de nodos y no del de aristas, por lo que ser til para representar grafos densos.

Otra forma de representar un grafo es por medio de listas que definen las aristas que conectan los nodos. Lo que se hace es definir una lista enlazada para cada nodo, que contendr los nodos a los cuales es posible acceder. Es decir, un nodo A tendr una lista enlazada asociada en la que aparecer un elemento con una referencia al nodo B si A y B tienen una arista que los une. Obviamente, si el grafo es no dirigido, en la lista enlazada de B aparecer la correspondiente referencia al nodo A.

Las listas de adyacencia sern estructuras que contendrn un valor entero (el nmero que identifica al nodo destino), as como otro entero que indica el coste en el caso de que el grafo sea ponderado.

DFS Para efectuar un recorrido en profundidad de un grafo, se selecciona cualquier nodo como punto de partida (por lo general el primer nodo del grafo) y se marcan todos los nodos del grafo como no visitados. El nodo inicial se marca como visitado y si hay un nodo adyacente a este que no haya sido visitado, se toma este nodo como nuevo punto de partida del recorrido. El recorrido culmina cuando todos los nodos hayan sido visitados. Una bondad de este algoritmo es que los nodos solo se vistan una vez. Esto implica que si se salvan en alguna estructura las aristas que se van recorriendo se obtiene un conjunto de aristas de cubrimiento mnimo del grafo, lo cual se utiliza frecuentemente se utiliza para reducir la complejidad del grafo cuando la perdida de informacin de algunas aristas no es importante. Este resultado se conoce como rbol DFS (DFS Tree). BFS En este algoritmo tambin se utiliza la estrategia de marcas los nodos como visitados para detectar la culminacin del recorrido, pero los nodos se recorren de una manera ligeramente distinta. De nuevo, se selecciona cualquier nodo como punto de partida (por lo general el primer nodo del grafo) y se marcan todos los nodos del grafo como no visitados. El nodo inicial se marca como visitado y luego se visitan TODOS los nodos adyacentes a este, al finalizar este proceso se busca visitar nodos ms lejanos visitando los nodos adyacentes a los nodos adyacentes del nodo inicial. Este algoritmo puede crear menos ambientes recursivos que el anterior porque visita mas nodos en un mismo ambiente, pero esto depende de cmo este construido el grafo. Este algoritmo tiene exactamente el mismo orden en tiempo de ejecucin del algoritmo de recorrido en profundidad y tambin se puede obtener el conjunto de aristas de cubrimiento mnimo del grafo. Una diferencia notable entre el DFS y el BFS es que este ultimo necesita de una estructura auxiliar, que por lo general es una cola, para el almacenamiento de las aristas que se van a visitar durante el recorrido. El siguiente ejemplo ilustra el funcionamiento del algoritmo BFS sobre un grafo de ejemplo. La secuencia de ilustraciones va de izquierda a derecha y de arriba hacia abajo.

Camino mas corto Todo camino en un dgrafo pesado tiene un peso asociado, el cual es la suma de los pesos de las aristas del camino. Esta medida esencial nos permite formular problemas como el de encontrar el camino con el menor peso entre dos vrtices. El tpico de esta seccin es el clculo de este tipo de camino, donde la longitud del camino no se mide en base al nmero de aristas del mismo, sino en base al peso del camino. Con esto ltimo en mente, definiremos al camino ms corto entre dos nodos de un dgrafo pesado, como el camino dirigido que tenga la propiedad de tener el peso mnimo entre todos los caminos que existan entre dicho par de nodos. Algoritmo de Dijkstra Es Grafos dirigidos El algoritmo de Dijkstra resuelve el problema de encontrar los caminos ms cortos a partir de un origen, en grafos pesados que no tengan pesos negativos. El algoritmo de Dijkstra es un algoritmo voraz que opera a partir de un conjunto S de nodos cuya distancia ms corta desde el origen ya es conocida. En principio, S contiene slo el nodo origen. En cada paso, se agrega algn nodo v a S, cuya distancia desde el origen es la ms corta posible. Bajo la hiptesis de que los pesos son no negativos, siempre es posible encontrar un camino ms corto entre el origen y v que pasa slo a travs de los nodos de S, al que llamaremos especial. En cada paso del algoritmo, se utiliza un arreglo D para registrar la longitud del camino especial ms corto a cada nodo. Una vez que S incluye todos los nodos, todos los caminos son especiales, as que D contendr la distancia ms corta del origen a cada vrtice. Se puede utilizar un arreglo P, para ir almacenando los caminos ms cortos. ARBOL DE EXPANSION MINIMA Anteriormente, tratamos el problema de encontrar la ruta ms corta entre dos nodos en un digrafo pesado, pero si el grafo no es dirigido y lo que se desea es encontrar la manera menos costosa de conectar todos los puntos, entonces nos enfrentamos al problema de encontrar un rbol de expansin mnima (MST Minimum Spanning Tree). Un rbol de expansin de un grafo conexo es un subgrafo que contiene todos los nodos del grafo y no tiene ciclos. El rbol de expansin mnima de un grafo pesado no dirigido es el rbol de expansin cuyo peso (la suma de los pesos de todas sus aristas) no es mayor al de ningn otro rbol de expansin. Algoritmo de Prim Es Grafos no dirigidos El algoritmo de Prim es tal vez el algoritmo de MST ms sencillo de implementar y el mejor mtodo para grafos densos. Este algoritmo puede encontrar el MST de cualquier grafo conexo pesado. Sea V el conjunto de nodos de un grafo pesado no dirigido. El algoritmo de Prim comienza cuando se asigna a un conjunto U de

nodos un nodo inicial perteneciente a de expansin, arista por arista.

V, en el cual crece un rbol

Algoritmos de Bsqueda
Bsqueda Secuencial Tablas de Dispersin Bsqueda Binaria

Aspectos Generales La bsqueda de un elemento dentro de un arreglo permite la recuperacin de datos previamente almacenados. Todos los algoritmos de bsqueda tienen dos finalidades: Determinar si el elemento buscado se encuentra en el conjunto en el que se busca. Si el elemento est en el conjunto, hallar la posicin en la que se encuentra. Bsqueda Secuencial Consiste en recorrer y examinar cada uno de los elementos del arreglo hasta encontrar el o los elementos el o los elementos se han examinado todos los elementos del arreglo. for(i=j=0;i<N;i++) if(array[i]==elemento) { solucion[j]=i; j ++; } Arreglo Ordenado: for(i=j=0;array[i]<=elemento;i++) Slo interesa conocer la primera ocurrencia del elemento en el arreglo: for(i=0;i<N;i++) if(array[i]==elemento) break; Bsqueda Binaria El arreglo debe estar ordenado. Consiste en dividir el arreglo por su elemento medio en dos sub arreglos ms pequeos, y comparar el elemento con el del centro. Si coinciden, la bsqueda se termina. Si el elemento es menor, debe estar (si est) en el primer sub arreglo, y si es mayor est en el segundo. Ejemplo BB Buscar el elemento 3 en el arreglo {1,2,3,4,5,6,7,8,9} Se toma el elemento central y se divide el arreglo en dos: {1,2,3,4} 5 {6,7,8,9} Como el elemento buscado (3) es menor que el central (5), debe estar en el primer sub arreglo: {1,2,3,4} Se vuelve a dividir el arreglo en dos: {1} 2 {3,4}

Como el elemento buscado es mayor que el central, debe estar en el segundo sub arreglo: {3,4} Se vuelve a dividir en dos: {} 3 {4} Como el elemento buscado coincide con el central, lo hemos encontrado. Si al final de la bsqueda todava no lo hemos encontrado, y el sub arreglo a dividir est vacio {}, el elemento no se encuentra en el arreglo. Tablas Hash Es una estructura de datos que asocia llaves o claves con valores. 1. La bsqueda permite el acceso a los elementos (telfono y direccin, por ejemplo) almacenados a partir de una clave generada (usando el nombre o nmero de cuenta, por ejemplo). 2. Funciona transformando la clave con una funcin hash en un hash, un nmero que la tabla hash utiliza para localizar el valor deseado. Qu es Hash? Hash se refiere a una funcin o mtodo para generar claves o llaves que representen de manera casi unvoca a un documento, registro, archivo,..., resumir o identificar un dato a travs de la probabilidad, utilizando una funcin hash o algoritmo hash. Un hash es el resultado de dicha funcin o algoritmo.

Вам также может понравиться