69
Tipos de Datos Abstractos TADs UNIDAD 2 Análisis y Diseño de Algoritmos

Complejidad Algoritmica

Embed Size (px)

Citation preview

1. UNIDAD 2 2. Definicin Un tipo abstracto de datos (TAD) es un conjunto de valores junto con las operaciones que sobre el se pueden aplicar, las cuales cumplirn diversas propiedades que determinarn su comportamiento. Es necesario utilizar una notacin formal para describir el comportamiento de las operaciones. 3. Definicin El calificativo abstracto responde al hecho de que los valores de un tipo pueden ser manipulados solamente mediante sus operaciones, conociendo nicamente sobre ellas las propiedades que cumplen, sin que sea necesario ningn conocimiento adicional sobre la representacin del tipo o la implementacin de dichas operaciones. 4. Especificacin frente a implementacin La manipulacin de los objetos de un tipo solo depende del comportamiento descrito en su especificacin y es independiente de su implementacin. La especificacin de un TAD consiste en establecer las propiedades que lo definen. Una especificacin ha de ser precisa, general, legible y no ambigua. La especificacin de un tipo define totalmente su comportamiento a cualquier usuario que lo necesite. 5. Especificacin frente a implementacin La implementacin de un TAD consiste en determinar una representacin para los valores del tipo y en codificar sus operaciones a partir de esta representacin, todo ello utilizando un lenguaje de programacin. Una implementacin del TAD es totalmente transparente a los usuarios del tipo y no se puede escribir hasta haber determinado claramente su especificacin. 6. Especificacin de TADs Especificar un TAD consiste en establecer las propiedades que lo definen: Coleccin de Objetos Operaciones sobre los Objetos La especificacin puede ser: Formal - Algebraica Informal - Lenguaje Natural 7. Especificacin Algebraica de TADs Una especificacin algebraica consta fundamental- mente de tres componentes: Tipos: son nombres de conjuntos de valores. Entre ellos est el tipo principal del TAD, aunque puede haber tambin otros que se relacionen con este. 8. Especificacin Algebraica de TADs Operaciones: son funciones con un perfil asociado que indica el tipo de cada uno de los argumentos y el tipo del resultado. En una especificacin algebraica no se permiten funciones que devuelvan varios valores, ni tampoco procedimientos no funcionales. Ecuaciones: son igualdades entre trminos formados con las operaciones y variables, y definen el comportamiento de las operaciones. 9. TAD Booleanos 10. Clasificacin de las Operaciones Para escribir las ecuaciones es necesario clasificar las operaciones segn el papel que queremos que jueguen en relacin con el tipo principal s: Constructoras (o generadoras): devuelven un valor de tipo s. Pensadas para construir todos los valores de tipo s. Puede haber ms de un subconjunto de operaciones generadoras, del que habra que elegir uno. 11. Clasificacin de las Operaciones Modificadoras: devuelven tambin un valor de tipo s. Pero estn pensadas para hacer clculos que produzcan resultados de tipo s. Observadoras: devuelven un valor de un tipo diferente a s. Pensadas para obtener valores de otros tipos a partir de valores de tipo s. 12. Ecuaciones TAD Booleano 13. Ecuaciones TAD Booleano Usando las ecuaciones podemos convertir cualquier trmino en un trmino construido. 14. Especificacion Completa del TAD Booleano 15. Especificacin del TAD Naturales 16. Especificacin del TAD Naturales 17. Especificacin del Conjunto de Naturales 18. Especificacin del Conjunto de Naturales (1) 19. Especificacin del Conjunto de Naturales (2) 20. Ecuaciones Condicionales 21. TIPOS de TADs Clsicos Existen TADs de Uso frecuente, generalmente para el manejo de estructuras de datos complejas: TAD LISTA TAD PILA TAD COLA 22. TAD LISTA LISTA Una lista enlazada es una secuencia de nodos en el que cada nodo est enlazado o conectado con el siguiente. La lista enlazada es una estructura de datos dinmica cuyos nodos suelen ser normalmente registros y que no tienen un tamao fijo. 23. TAD LISTA Se utiliza para almacenar informacin del mismo tipo. Pueden contener un nmero indeterminado de elementos, y stos elementos mantienen un orden explcito ya que cada elemento contiene en s mismo la direccin del siguiente elemento. Una lista es una secuencia de 0 a n elementos. A la lista de cero elementos llamaremos lista vaca 24. TAD LISTA Matemticamente, una lista es una secuencia de cero o ms elementos de un determinado tipo. (a1,a2 , a3 ..., an) donde n > = 0 Si n = 0 la lista es vaca. Los elementos de la lista tienen la propiedad de que estn ordenados de forma lineal, segn las posiciones que ocupan en la misma. Se dice que ai precede a ai+1 para i = 1, 2, 3,..., n -1 y que ai sucede a ai-1 para i = 2, 3,..., n. 25. Especificacin del TAD LISTA (Formal) TAD lista (VALORES: secuencia de elementos; OPERACIONES:Inicia, Localiza, Recupera, Inserta, SuprimeDir, Modifica) Sintaxis: *Inicia (Lista ) Lista Localiza (Lista, Elemento) Posicion Recupera (Lista, Posicion) Elemento *Inserta (Lista, Posicion, Elemento) Lista SuprimeDir(Lista, Posicion) Lista Modifica (Lista, Posicion, Elemento) Lista Semntica: SuprimeDir(Inicia (Lista )) error SuprimeDir(Inserta (L, P, E), P) L Modifica (Inicia (Lista ), P, E) error Modifica (Inserta (L, P, E), P, E1) Inserta (L,P,E1) 26. Especificacin del TAD LISTA (Informal) Inicia (Lista) Lista Efecto: Devuelve una lista vaca Localiza (Lista, Elemento) Posicion Efecto: Devuelve la posicin donde est el Elemento de la Lista. Si no est, devuelve nulo. Recupera (Lista, Posicin) Elemento Efecto: Devuelve el Elemento que est en la Posicin. Excepcin: Que la posicin no sea un ndice de la Lista. 27. Especificacin del TAD LISTA (Informal) Inserta (Lista, Posicin, Elemento) Lista Efecto: Devuelve la Lista despus de aadir el Elemento en la Posicin. Excepciones: Que la posicin no sea un ndice de la Lista, que la Lista est llena. SuprimeDir (Lista, Posicion) Lista Efecto: Devuelve la lista sin el elemento de la Posicin especificada. Excepciones: Que la posicin no sea un ndice de la Lista, que la Lista sea vaca Modifica (Lista, Posicion, Elemento) Lista Efecto: Devuelve la lista con el nuevo Elemento en la Posicin especificada. Excepciones: Que la Posicin no sea un ndice de la Lista, que la Lista sea vaca. 28. Implementacin del TAD LISTA Para representar las listas y las correspondientes implementaciones pueden seguirse dos alternativas: Utilizacin de la estructura esttica de arreglo para almacenar los nodos de la lista. Utilizacin de estructuras dinmicas, mediante punteros y variables dinmicas. 29. Implementacin del TAD LISTA (Est. Estticas) 30. Implementacin del TAD LISTA (Est. Estticas) Unit LEstatic; Interface ConstMax= ...; {especifica tamao mximo lista} type Info= ...; {tipo de campo de informacin lista} Lista = record Elementos: array[1..Max] of tInfo; Ultimo: integer end; Posicion= 0 .. Max; 31. Implementacin del TAD LISTA (Est. Estticas) Procedure Inicia (var L: Lista);functionLocaliza (L: Lista; E: tInfo): Posicion; Procedure Recupera (L: Lista; P:Posicion; var E: tInfo); Procedure Inserta (var L: Lista; P:Posicion; E: tInfo); Procedure SuprimeDir(var L: Lista; P: Posicion); Procedure Modifica (var L: Lista; P: Posicion; E: tInfo); 32. Implementacin del TAD LISTA (Est. Estticas) Implementation Procedure Inicia; begin L.Ultimo := 0 end; Function Localiza; var Q: Posicion; Lc: boolean; begin Q := 1; Lc:= false; while (Q L.Ultimo) or (P < 1) then Error (1) else E := L.Elementos [P] end; 34. Implementacin del TAD LISTA (Est. Estticas) Implementation Procedure Inserta; Var Q: Posicion; Begin if L.Ultimo = Max then Error (2) else if(P > L.Ultimo) or (P < 1) then Error (1) else begin for Q := L.Ultimo downtop do L.Elementos [Q + 1] := L.Elementos [Q] ; L.Ultimo := L.Ultimo + 1; L.Elementos [P] := E end end; 35. Implementacin del TAD LISTA (Est. Estticas) Implementation Procedure Suprime; Var Q: Posicion; begin if L.Ultimo = 0 then Error(3) else if(P > L.Ultimo) or (P < 1) then Error(1) else begin L.Ultimo := L.Ultimo 1; for Q := P to L.Ultimo do L.Elementos[Q] := L.Elementos[Q+1] end end end end; 36. Implementacin del TAD LISTA (Est. Estticas) Implementation Procedure Modifica; begin if L.Ultimo = 0 then Error(3) else if(P > L.Ultimo) or (P < 1) then Error (1) else L.Elementos[P] := E end; end. 37. Implementacin del TAD LISTA (Est. Dinmica) Las desventajas de la implementacin anterior son: a) Estructura rgida. Insercin y supresin desplazando el resto del array. b) No se utiliza de forma ptima la memoria. Hay que reservar espacio en memoria para toda la estructura durante toda la ejecucin. Estos inconvenientes pueden solucionarse utilizando variables dinmicas 38. Implementacin del TAD LISTA (Est. Dinmica) Los elementos de la lista dinmica se definen como datos de tipo registro con, al menos, dos componentes: 1. Almacn del dato de la lista. 2. Puntero, que almacena la posicin de memoria del siguiente elemento de la lista o nilsi es el ltimo elemento Una lista dinmica simple se llama lista enlazada. Cada uno de los elementos de una lista dinmica se llaman nodos. 39. Implementacin del TAD LISTA (Est. Dinmica) El nmero de nodos puede variar rpidamente en un proceso, aumentando por insercin de nodos o disminuyendo por supresin de nodos. Una lista enlazada es aquella en la que el orden de las componentes se determina mediante un campo enlace explcito en cada nodo. 40. Implementacin del TAD LISTA (Est. Dinmica) Las operaciones sobre una lista enlazada permiten acceder a la misma mediante un puntero externo, que contiene la direccin del primer nodo de la lista. 41. Implementacin del TAD LISTA (Est. Dinmica) Desventajas Cada vez que se quiera acceder a un nodo hay que recorrer la lista, a travs de los enlaces hasta alcanzar su posicin. Cada nodo ocupa la memoria adicional del campo enlace. Al trabajar con estructuras dinmicas hay que manejar dos clases diferentes de variables: variables puntero (direccionan un dato) y variables de referencia (son apuntadas). 42. Implementacin del TAD LISTA (Est. Dinmica) Unit LDinami; Interface Type tInfo= ...; {tipo de campo de informacin lista} Ptr= ^Nodo; Nodo = record Info: tInfo; Sig: Ptr end; Procedure Inicia (var L: Ptr); Function Localiza (L: Ptr; E: tInfo): Ptr; Procedure Recupera (L: Ptr; P: Ptr; varE: tInfo); Procedure Inserta (var L: Ptr; P: Ptr; E: tInfo); Procedure SuprimeDir(var L: Ptr; P: Ptr); Procedure Modifica (L: Ptr; P: Ptr; E: tInfo); 43. Implementacin del TAD LISTA (Est. Dinmica) Implementation Procedure Inicia; Begin L := nil end; Function Localiza begin while (L^.Signil) and (L^.InfoE) do L := L^.Sig; if L^.Info E then Localiza := nil else Localiza := L end; 44. Implementacin del TAD LISTA (Est. Dinmica) Implementation Procedure Inserta; {Inserta en L un nodo con el Campo E, delante del nodo con Direccin P} begin new(A); A^.Info:= E; if(L = nil) then L := A else if P = L then begin A^.Sig:= P; L := A; end else begin Anterior (P, L)^.Sig:= A; A^.Sig:= P; end end; 45. Implementacin del TAD LISTA (Est. Dinmica) Implementation Procedure SuprimeDir; begin if P = L {Primer nodo} begin L := L^.Sig; dispose(P) end else if Anterior(P,L) < > nil then begin {Enlaza anterior con siguiente} Anterior(P, L)^.Sig:= P^.Sig dispose(P) end end; 46. Implementacin del TAD LISTA (Est. Dinmica) Implementation Procedure Modifica; Begin if P nil then P^.info := E end; 47. Ejercicios TAD LISTA (Est. Dinmica) EsVacia(L):Funcin que determina si L es vaca o no. Existe (E, L):Funcin que determina si el elemento E se encuentra en L o no. Inserprim(E, L):Inserta un nodo con la informacin E como primer nodo de la lista. Inserfin(E, L):Inserta un nodo con el campo E como ltimo nodo de la lista L. Suprime (E, L):Elimina el nodo de la lista que contiene E 48. TAD Lista Listas Doblemente Enlazadas En las listas simplemente enlazadas hay un solo sentido en el recorrido de la Lista. Puede resultar En cada nodo de ste tipo de listas existe dos enlaces, uno al siguiente nodo y otro al anterior. Son listas simtricas 49. TAD Lista Listas Doblemente Enlazadas 50. TAD Lista Listas Circulares 51. TAD PILA Una pila es una estructura de datos en la que todas las inserciones y eliminaciones de elementos se realizan por un extremo denominado tope o cima de la pila. La implementacin de una pila se puede realizar mediante arreglos o con punteros. El inconveniente de la realizacin de una pila mediante arreglos es que su tamao mximo se debe especificar en tiempo de compilacin. 52. TAD PILA Tienen una dinmica LIFO (Last In, First Out) 53. TAD PILA Estructura Esttica 54. TAD PILA Estructura Esttica - Ejercicios 1) Definir, de manera informal, las operaciones posibles de un TAD pila 2) Implementar las operaciones de un TAD pila utilizando una estructura esttica. 55. TAD PILA Estructura Dinmica 56. TAD PILA Aplicaciones La Pila son utilizadas para solucionar una amplia variedad de problemas. Llamada a subprogramas Recursin Tratamiento de expresiones aritmticas Ordenacin 57. TAD PILA Aplicaciones 58. TAD PILA Aplicaciones 59. TAD Cola Cola: Secuencia de elementos de un cierto tipo, dispuestos en una dimensin (Tipo Lineal de Datos) Nuevos elementos se aaden al final de la estructura Operacin Aadir Los elementos salen o se eliminan de la cabeza de la cola. Operacin Eliminar 60. TAD Cola Valor Especial: Cola Vaca Estructura FIFO (First In, First Out) el orden de salida debe corresponderse con el orden de entrada Los elementos salen o se eliminan de la cabeza de la cola. Operacin Eliminar 61. TAD Cola - Representacin 62. TAD COLA Estructura Esttica Arreglos Lineales 63. TAD COLA Estructura Esttica Arreglos Circulares 64. TAD COLA Estructura Esttica Arreglos Circulares 65. TAD COLA Estructura Esttica Arreglos Circulares Cola LLena 66. TAD COLA Estructura Esttica Arreglos Circulares Supresin del ltimo elemento 67. TAD COLA Estructura Esttica Arreglos Circulares Cola Vacia 68. TAD COLA Estructura Dinmica Listas enlazadas 69. TAD COLA Estructura Dinmica Listas Circulares