Upload
graciano-luz
View
230
Download
0
Embed Size (px)
Citation preview
M.C. José Andrés Vázquez Flores
FCC/Primavera 2014
AbstracciónEs un proceso mental mediante el cual se extraen
los rasgos esenciales de una problemática mediante descripción simplificada de la realidad.
Abstracción de datos: determinación de un conjunto de objetos organizados (estructuras de datos) y el conjunto de operaciones que se puede efectuar sobre ellos. En este proceso se omiten los detalles específicos de la implementación.
04/21/23 2
Tipos de Datos Abstracto (TDA)Una estructura de datos es la manera de organizar
los datos para realizar operaciones sobre ellos de forma eficiente.
El TDA es un tipo de dato organizado que consiste en la declaración de la estructura de datos más el conjunto de operaciones en las que interviene tal estructura.
El usuario de un TDA invoca esas operaciones para crear, destruir, manipular y consultar información del tipo de datos abstracto.
04/21/23 3
Objetivo de los TADsEl fin que persigue el concepto de TDA es
separar el uso del tipo de dato, de su implementación.
Para conseguir este objetivo, la definición de un TDA se divide en dos partes:EspecificaciónImplementación
4
TDA
Especificación Implementación
Sintáctica SemánticaEstructuras de datos
Algoritmos
:Especificación Sintáctica
1) Especificación Sintáctica: ¿Qué hace? Especificación de las entidades y
sus propiedades (interface)Definir el nombre de las entidades abstractas.Definir el nombre de las operaciones indicando
el dominio (argumentos) y el codominio o rango (los valores de retorno)
Especificación Semántica2) Especificación Semántica:
¿Cómo lo hace? Descripción de la representación del objeto (estructura de los datos) y desarrollo de las operaciones.
Definir el significado de cada operación usando los símbolos definidos en la especificación sintáctica.
Especificación semántica. ContLa especificación semántica puede ser
de dos tipos:(1) Informal, a través del lenguaje natural (2) Formal, rigurosa y fundamentada
matemáticamente.Además:{P} Pre-condición: condiciones que
deben cumplirse antes de realizar la operación.
{Q} Post- condición: condiciones que se cumplen una vez realizada la operación.
La notación usual {P} S {Q} donde S es la función o procedimiento.
Especificación de un TDALa especificación de un TDA consiste en
establecer las propiedades que lo definen.Para especificar un TDA es necesario describir:
Los valores que pueden tomar los datos de ese tipo
Todas las operaciones realizables sobre ellos.Una especificación debe poseer 4 propiedades:
Ser precisa - solo dice lo imprescindible Ser general - es adaptable a diferentes contextos Ser legible - transmite a los usuarios del tipo y al
implementador el comportamiento del tipo
no ambigua - evita dobles interpretaciones
8
Ejemplo: TDA BolsaTipo: BolsaDefinición: Es una colección no ordenada de elementos con
repeticiónSintaxis: CrearBolsa() → BolsaBolsaVacia → BolsaBolsaLLena → BolsaPoner(Bolsa, elemento) → BolsaEsVacia(Bolsa) → BooleanRetirar(Bolsa, elemento) → BolsaReciclar(Bolsa)->PlásticoSemántica: b es Bolsa, e, f son elementosCrearBolsa() = BolsaVacia { precondición n/a,postcondición: devuelve una bolsa
vacía }
EsVacia(CrearBolsa()) = Verdadero { precondición: existencia de una bolsa, postcondición: devuelve verdadero si la bolsa no tiene elementos, falso en otro caso}
EsVacia(Poner(CrearBolsa(), e)) = FalsoRetirar(BolsaVacia, e) = Error { precondición: la bolsa no está vacía ,
postcondición:elimina el elemento e de la bolsa B }
Retirar(Poner(CrearBolsa(),f), e) = f si f = e Poner(BolsaLlena, e) = Error { precondición: la bolsa no está llena, poscondición añade
el elemento e a la bolsa }
Ejemplo:TDA FracciónTipo: FracciónDefinición: Una fracción es un par ordenado de enteros, siempre y cuando
la segunda componente sea distinta de cero.Tipo abstracto Racional = (e(1), e(2))Sintaxis: ConstruirFracción(a,b:Entero) → Fracción Numerador (r: Fraccion) → entero Denominador (r: Fraccion) → enteromultiplicar(r1, r2: Fraccion) → Fraccion
Semantica:ConstruirFracción(a,b:Entero)=Fraccion { precondición: b ≠ 0, postcondición: e(1) = a AND
e(2) = b }
Numerador (r: Fraccion) = entero { precondición: debe existir una fracción, postcondición: Numerador = e(1) }
Denominador (r: Fraccion) =entero { precondición: debe existir una fracción,postcondición: Denominador = e(2) }
multiplicar(r1, r2: Fraccion) =Fraccion { precondición: deben existir dos fracciones, multiplicar=construirFraccion(Numerador(r1) * Numerador(r2), Denominador(r1)*Denominador(r2)), postcondición: una nueva fracción
Notación
Toda descripción de un TDA consiste en dos partes :
1. Datos: Esta parte describe la estructura de los datos usada en el TDA de una manera informal.
2. Operaciones: Esta parte describe las operaciones válidas para este TDA, por lo tanto, describe su interface. Usamos la operación especial constructor para describir las acciones que se van a ejecutar una vez que una entidad de este TDA es creada y destructor para describir las acciones que se van a efectuar cuando una entidad es destruida.
Tipos de Estructuras respecto a memoriaEstáticas: Son aquellas en las que el espacio
ocupado en memoria se define en tiempo de compilación y no puede ser modificado durante la ejecución del programa. los arreglos y las estructuras.
Dinámicas: Son aquellas en las que el espacio ocupado en memoria puede ser modificado en tiempo de ejecución. las listas, los grafos y los árboles.
04/21/23 12
Tipos de estructuras respecto a la organizaciónPor posición: Pilas, Colas y Listas
Por valor: árboles
13
Organización para guardar los elementos de la estructuraExisten cuatro tipos de organización para los
datos de una estructura:Lineal:
Jerárquica:
Red:
Sin relación:
04/21/23 14
Funciones básicas para las estructuras de datos Constructoras: crean la estructura.
Acceso: son la base para desarrollar una serie de operaciones sobre la estructura porque permite navegar en ella.
Destructoras: devuelven al sistema los recursos asignados a la estructura de datos.
04/21/23 15
Operaciones efectuadas en estructuras de datosNavegar por la estructura: realizar el recorrido de la
estructura.Modificación: permite variar total o parcialmente el
contenido de los elementos de la estructura.Consulta de información: permite obtener información
de uno o más elementos de la estructura.Búsqueda: determina si un elemento se encuentra o
no en la estructura. Inserción: se incluye un nuevo elemento en la
estructuraEliminación: permite suprimir elementos de la
estructura.04/21/23 16
Tipos de organizaciónOrganización Lógica: Involucra todo
aquello que tenga que ver con las partes de cada elemento, tipo de los elementos, referencia a alguno o algunos elementos, cantidad de los elementos que contiene la estructura, relaciones entre los elementos, etc.
Organización Física: Se refiere a todo aquello que tenga que ver con la ubicación de la información en la memoria y la forma de almacenarla de acuerdo a sus dominios.
04/21/23 17
04/21/23 18
Ejemplo Ejemplo Organización Lógica:
Arreglo de un índice;Inicio: 1, Fin: 50;Tipo de elementos: Entero;
Organización Física: Almacenamiento: Secuencial
Dirección Inicial: dir(A)Tamaño del elemento: 2 bytes;Número de elementos: 50;
Eliminación de un elemento:• Por desplazamiento• Por marca
04/21/23 19
ArreglosArreglosOrganización Lógica:
Dimensiones.Límite inferior y superior de cada dimensión.Tipo de elementos.
Organización Física: Dirección inicial (de un intervalo de memoria)Tamaño de los elementos.Orden de las dimensiones.Desplazamientos .
19
04/21/23 20
ArregloArreglo
Las operaciones con los arreglos son:Recuperación de uno de sus elementos.Actualización de un elemento.
Ambas operaciones se realizan en función de los índices que señalan la ubicación del elemento.
20
04/21/23 21
ArreglosArreglosSea A un ARREGLO [1..20] con elementos de
tipo Carácter.Reserva un intervalo de memoria de 20 lugares
consecutivos a partir de una dirección que denotaremos por DirA.
21
A[1]A[2]A[3]
A[20]
DirA
DirA+1
DirA+2
DirA+19
Intervalo de memoria: [DirA, DirA+19]
04/21/23 22
El REGISTRO proporciona heterogeneidad en este producto cartesiano; por ejemplo:
Sea x un REGISTRO con los camposy de tipo ENTEROz de tipo REAL
tiene como dominio Dom (x) = Z X R, cuyos elementos son de la forma (a,b) a Z y bR.
Tipos de ED y sus dominiosTipos de ED y sus dominios
04/21/23 23
En general, tenemos que por ejemplo:Sea k un REGISTRO con los campos
l de tipo booleanom de tipo x
Dom(k) = B X Dom(x)Para poder generalizar esto último, se deben
considerar los elementos de referencia, para ello consideremos que en el siguiente ejemplo el operador ^ define tales elementos.
Tipos de ED y sus dominiosTipos de ED y sus dominios
04/21/23 24
Sea p un REGISTRO con los camposxc, yc de tipo Real
Sea l-p un REGISTRO con los campospunto de tipo psp de tipo ^l-p
Dom (l-p) define un dominio recursivo:Dom (l-p) = Dom (p) x Dom (^l-p)
Los elementos de Dom (^l-p) son de la forma Dom(^l-p) = {nil} U [Dom (l-p)].
Tipos de ED y sus dominiosTipos de ED y sus dominios
04/21/23 25
Polinomio de DireccionamientoPolinomio de Direccionamiento
Suponiendo que el direccionamiento sea a nivel de bytes.
Las operaciones se reducen al cálculo del Polinomio de Direccionamiento (Pd).
El Pd obtiene la dirección absoluta de un elemento del arreglo dados sus índices.
25
04/21/23 26
Por ejemplo:Si nos referimos a A[7] Pd (A[7]) = DirA + 6
Pd (A[x]) = DirA + x-1.En general se tiene que si B es un ARREGLO
[1..5] con elementos de tipo TPd (B[x]) = DirB + (x-1) lt; con lt igual a la longitud en bytes asignada al tipo T.
Polinomio de DireccionamientoPolinomio de Direccionamiento
26
04/21/23
27
Para almacenar los elementos de una matriz en la memoria que es lineal, podemos hacerlo por columnas o por renglones.
Matriz de 3X4, n=3, m=4 11 12 13 14 21 22 23 24 31 32 33 34
Polinomio de DireccionamientoPolinomio de Direccionamiento
27
04/21/2328
Por columnas: Dirección Elemento
100=dir 11 101=dir+1 21 1ª. Columna 102=dir+2 31 103=dir+3 12 104=dir+4 22 2ª. Columna 105=dir+5 32 106=dir+6 13 107=dir+7 23 3ª. Columna 108=dir+8 33 109=dir+9 14 110=dir+10 24 4ª. Columna 111=dir+11 34
Polinomio de DireccionamientoPolinomio de Direccionamiento
28
04/21/23
29
Para la dirección del elemento C[i][j] y el almacenamiento por columnas, el PD es:
PD(C[i][ j])=DirC+[n*(j-1)+(i-1)]*T
Si el almacenamiento se hubiese realizado por renglones, entonces el PD quedaría como:
pd(C[i,j])=dirC+[m*(i-1)+(j-1)]*T
Polinomio de DireccionamientoPolinomio de Direccionamiento
29
Polinomio de direccionamiento para un arreglo tridimensionalSean p el número de piso, r el número de
renglones y c el número de columnas.Pd(C[i,j,k])= DirC + (i-1)*r*c +(j-1)*c + (k-1)
04/21/23
30