Conceptos Básicos de Estructuras de Datos
Download
Report
Transcript Conceptos Básicos de Estructuras de Datos
M.C. José Andrés Vázquez Flores
FCC/Primavera 2014
Abstracción
Es 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
4/8/2015
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.
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.
4/8/2015
3
Objetivo de los TADs
El 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ón
Implementación
TDA
Especificación
Sintáctica
Semántica
Implementación
Estructuras
de datos
Algoritmos
4
:
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ántica
2) 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. Cont
La 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 TDA
La 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 Ser general Ser legible -
tipo
no ambigua -
solo dice lo imprescindible
es adaptable a diferentes contextos
transmite a los usuarios del tipo y al
implementador el comportamiento del
evita dobles interpretaciones
8
Ejemplo: TDA Bolsa
Tipo: Bolsa
Definición: Es una colección no ordenada de elementos con repetición
Sintaxis:
CrearBolsa() → Bolsa
BolsaVacia → Bolsa
BolsaLLena → Bolsa
Poner(Bolsa, elemento) → Bolsa
EsVacia(Bolsa) → Boolean
Retirar(Bolsa, elemento) → Bolsa
Reciclar(Bolsa)->Plástico
Semántica: b es Bolsa, e, f son elementos
CrearBolsa() = 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)) = Falso
Retirar(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ón
Tipo: Fracción
Definició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) → entero
multiplicar(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.
2.
Datos: Esta parte describe la estructura de los datos usada
en el TDA de una manera informal.
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
memoria
Está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.
4/8/2015
12
Tipos de estructuras respecto a la
organización
Por posición: Pilas, Colas y Listas
Por valor: árboles
13
Organización para guardar los elementos de la
estructura
Existen cuatro tipos de organización para los datos de
una estructura:
Lineal:
Jerárquica:
Red:
Sin relación:
4/8/2015
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.
4/8/2015
15
Operaciones efectuadas en estructuras de
datos
Navegar 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 estructura
Eliminación: permite suprimir elementos de la estructura.
4/8/2015
16
Tipos de organización
Organizació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.
4/8/2015
17
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
4/8/2015
18
Arreglos
Organizació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
4/8/2015
19
Arreglo
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
4/8/2015
20
Arreglos
Sea 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.
A[1]
A[2]
A[3]
A[20]
DirA
DirA+1
DirA+2
Intervalo de memoria:
[DirA, DirA+19]
DirA+19
21
4/8/2015
21
Tipos de ED y sus dominios
El REGISTRO proporciona heterogeneidad en este
producto cartesiano; por ejemplo:
Sea x un REGISTRO con los campos
y de tipo ENTERO
z de tipo REAL
tiene como dominio Dom (x) = Z X R, cuyos
elementos son de la forma (a,b) a Z y bR.
4/8/2015
22
Tipos de ED y sus dominios
En general, tenemos que por ejemplo:
Sea k un REGISTRO con los campos
l de tipo booleano
m 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.
4/8/2015
23
Tipos de ED y sus dominios
Sea p un REGISTRO con los campos
xc, yc de tipo Real
Sea l-p un REGISTRO con los campos
punto de tipo p
sp 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)].
4/8/2015
24
Polinomio 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
4/8/2015
25
Polinomio de Direccionamiento
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 T
Pd (B[x]) = DirB + (x-1) lt; con lt igual a la longitud
en bytes asignada al tipo T.
26
4/8/2015
26
Polinomio de Direccionamiento
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
27
27
4/8/2015
Polinomio de Direccionamiento
Por columnas:
Dirección
100=dir
101=dir+1
102=dir+2
103=dir+3
104=dir+4
105=dir+5
106=dir+6
107=dir+7
108=dir+8
109=dir+9
110=dir+10
111=dir+11
Elemento
11
21
31
12
22
32
13
23
33
14
24
34
1ª. Columna
2ª. Columna
3ª. Columna
4ª. Columna
28
4/8/2015
28
Polinomio de Direccionamiento
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
2929
4/8/2015
Polinomio de direccionamiento para un
arreglo tridimensional
Sean 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)
30
4/8/2015