Professional Documents
Culture Documents
Abstractos de Datos
© Zenó
Zenón J. Herná
Hernández Figueroa
This product includes images from Corel GalleryTM Magic 65,000
which are protected by the copyright laws of the U.S.
U.S. Canada and
elsewhere.
elsewhere. Used under licence.
licence.
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Estructuras de Datos
• Una estructura de
datos es un conjunto
de elementos de
información dotado
de una organización.
vs
Estructura
dinámica
Clasificación de las estructuras
de datos. Ana
David
Esteban
Pedro
Estructura
lógica
vs Ana
David
Esteban
David
4
1
Esteban Ana 2
Estructura de Pedro Pedro
3
0
Representación
vs
tipo. distintos tipos.
Estructura de
Representación
Se pueden agrupar con otros Se pueden agrupar con otros
del mismo tipo ... del mismo o diferente tipo ...
Separación
Abstracción
+
Tipo de datos
Encapsulamiento Ocultamiento
Tipos Abstractos de Datos
• Un tad presenta una
interfaz que facilita su
utilización.
Tipos Abstractos de Datos
• Un tad presenta una
interfaz que facilita su
utilización.
• y oculta los detalles
de su
implementación.
Tipos Abstractos de Datos
• Un tad presenta una
interfaz que facilita su
utilización.
• y oculta los detalles
de su
implementación.
• que quedan
encapsulados.
Tipos Abstractos de Datos
…
Predecesor(Sucesor(x)) = x
Las operaciones
Producto(x,Cero) = Cero parciales no están definidas para todo el
rango de valores
Producto(x,Sucesor(y)) de los tipos de sus argumentos.
= Suma(x,Producto(x,y))
Menor(Cero,Sucesor(x)) = verdadero
Menor(x,Cero) = falso
Menor(Sucesor(x),Sucesor(y)) = Menor(x,y)
fin especificación
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Tad genéricos
A1B
AUB A-B
A B A B A B
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
parámetros
define Conjunto<TElemento>
operaciones
Vacío :
tipo TElemento
{constructoras generadoras}
÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión define Conjunto<TElemento>
: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
A, B, C 0 Conjunto<TElemento>
X, Y 0 TElemento
axiomas
Unión(Vacío,A) = A
Unión(Unión(A,B),B) = Unión(A,B)
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)
Intersección(Vacío,A) = Vacío
Intersección(Unión(A,B),B) = B
Intersección(Unión(A,B),C) =
Unión(Intersección(C,A),Intersección(C,B))
Diferencia(A,Vacío) = A
Diferencia(A,Unión(A,B)) = Vacío
Diferencia(Unión(A,B),C) =
Unión(Diferencia(A,C),Diferencia(B,C))
Incluido(A,Vacío) = Falso
Incluido(A,Unión(A,B)) = Verdadero
Incluido(Unión(A,B),C) = Incluido(A,C) v Incluido(B,C)
Pertenece(Vacío,E) = Falso
Pertenece(Unitario(X),Y) = (X = Y)
Pertenece(Unión(A,B),X) = Pertenece(A,X) w Pertenece(B,X)
Cardinal(Vacío) = 0
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
operaciones
define Conjunto<TElemento>
operaciones
Vacío :
{constructoras generadoras}
{constructoras generadoras}
÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión Vacío :
: (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
Unión
÷ (Conjunto<TElemento>) : (Conjunto<TElemento>,Conjunto<TElemento>)
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{observadoras}
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Lógico)
{constructoras no generadoras}
Pertenece: (Conjunto<TElemento>,TElemento) ÷ (Lógico)
Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)
sea Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
A, B, C 0 Conjunto<TElemento>
X, Y
axiomas
÷ (Conjunto<TElemento>)
0 TElemento
Unión(Vacío,A) = A
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
Unión(Unión(A,B),B) = Unión(A,B)
÷ (Conjunto<TElemento>)
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)
Intersección(Vacío,A) = Vacío
{observadoras}
Intersección(Unión(A,B),B)
Intersección(Unión(A,B),C) =
= B
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷
Unión(Intersección(C,A),Intersección(C,B))
Diferencia(A,Vacío) = A
(Lógico)
Diferencia(A,Unión(A,B)) = Vacío
Diferencia(Unión(A,B),C) =
Pertenece: (Conjunto<TElemento>,TElemento)
Unión(Diferencia(A,C),Diferencia(B,C)) ÷
Incluido(A,Vacío)
(Lógico)
= Falso
Incluido(A,Unión(A,B)) = Verdadero
Pertenece(Vacío,E) = Falso
Pertenece(Unitario(X),Y) = (X = Y)
Pertenece(Unión(A,B),X) = Pertenece(A,X) w Pertenece(B,X)
normal.
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
define Conjunto<TElemento>
operaciones
{constructoras generadoras}
Vacío : ÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{observadoras}
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Lógico)
Pertenece: (Conjunto<TElemento>,TElemento) ÷ (Lógico)
Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)
sea
A, B, C 0 Conjunto<TElemento>
X, Y 0 TElemento
axiomas
Unión(Vacío,A) = A
Unión(Unión(A,B),B) = Unión(A,B)
axiomas
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)
Unión(Vacío,A)
Intersección(Vacío,A) = Vacío = A
Intersección(Unión(A,B),B) = B
Unión(Unión(A,B),B)
Intersección(Unión(A,B),C) =
Unión(Intersección(C,A),Intersección(C,B))
= Unión(A,B)
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)
Diferencia(A,Vacío) = A
Diferencia(A,Unión(A,B)) = Vacío
Diferencia(Unión(A,B),C) =
Unión(Diferencia(A,C),Diferencia(B,C))
Incluido(A,Vacío) = Falso
Pertenece(Vacío,E) = Falso
Pertenece(Unitario(X),Y) = (X = Y)
Pertenece(Unión(A,B),X) = Pertenece(A,X) w Pertenece(B,X)
Cardinal(Vacío) = 0
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
define Conjunto<TElemento>
operaciones
{constructoras generadoras}
Vacío : ÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección(Vacío,A) = Vacío
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Intersección(Unión(A,B),B) = B
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{observadoras}
Intersección(Unión(A,B),C) =
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Lógico)
Pertenece: (Conjunto<TElemento>,TElemento) ÷ (Lógico)
Unión(Intersección(C,A),Intersección(C,B))
Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)
sea
A, B, C 0 Conjunto<TElemento>
X, Y 0 TElemento
axiomas
Diferencia(A,Vacío) = A
Unión(Vacío,A) = A
Unión(Unión(A,B),B) = Unión(A,B)
Diferencia(A,Unión(A,B)) = Vacío
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)
Diferencia(Unión(A,B),C)
Intersección(Vacío,A) = Vacío
Intersección(Unión(A,B),B) = B
=
Unión(Diferencia(A,C),Diferencia(B,C))
Intersección(Unión(A,B),C) =
Unión(Intersección(C,A),Intersección(C,B))
Diferencia(A,Vacío) = A
Diferencia(A,Unión(A,B)) = Vacío
...
Diferencia(Unión(A,B),C) =
Unión(Diferencia(A,C),Diferencia(B,C))
Incluido(A,Vacío) = Falso
Incluido(A,Unión(A,B)) = Verdadero
Incluido(Unión(A,B),C) = Incluido(A,C) v Incluido(B,C)
Cardinal(Vacío) = 0
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos
NumElementos Sig
Elementos Elemento
• Realización en Ada.
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Problemas específicos de
implementación.
• La mayoría están relacionados con el uso
de memoria dinámica:
– Inicialización.
– Destrucción.
– Asignación.
– Comparación.
Problemas específicos de
implementación. Inicialización.
• Puede ser necesario inicializar un tad para que
adopte un valor apropiado antes de poder
usarlo.
– Procedimiento de Inicialización/constructor.
– Ada inicializa todos los punteros a Null de forma
automática y el resto de los campos se pueden
inicializar en la definición del tipo.
– No obstante, los tipos Controlled pueden tener un
procedimiento Initialize para realizar inicializaciones
adicionales.
Problemas específicos de
implementación. Destrucción.
• Los recursos ocupados por una variable
deben liberarse cuando ésta acaba su ciclo
de vida.
• Si parte de la estructura está en memoria
dinámica es necesario usar un
procedimiento de finalización/destructor.
• Se tiende a incorporar a los lenguajes
mecánismos de garbage collection.
Problemas específicos de
implementación. Asignación.
A A1 A2 ... AN
N
B B1 B2 ... BM
M
B := A;
A A1 A2 ... AN
N
B B1 B2 ... BM
N
B M
B1 B2 ... B M
B1 B2 ... B M
A1 A2 ... A1 A2 ...
Temp N
Temp N
Temp N
B B N
A1 A2 ... B N
A1 A2 ...
N
Problemas específicos de
implementación. Comparación.
A 23 12 25
3
B 23 12 25
3
¿Son iguales?