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 bR.
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