Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Seminario de Grado
Modulo: Algoritmos y Estructura de Datos
• ¿Qué es lo importante?
– En cada parte del trabajo puede serlo
cosas distintas
Notación de espeficicación:
Partes que debe tener la especificación,
Significado y tipo de cada parte,
Partes que pueden ser opcionales, ...
Especificaciones informales.
• Notación
• Operación <nombre> (ent <id>: <tipo>;...; sal
<tipores>)
Notación
La descripción formal constará de cuatro partes:
NOMBRE. Nombre genérico del TAD.
CONJUNTOS. Conjuntos de datos que intervienen
en la definición.
SINTAXIS. Signatura de las operaciones definidas.
<nombre_operación> : <conj_dominio> →
<conj_resultado>
SEMÁNTICA. Indica el significado de las
operaciones.
Especificaciones Formal – Numeros Naturales
NOMBRE natural
• CONJUNTOS N conjunto de naturales, B conjunto de valores
booleanos
• SINTAXIS
• cero: → N
• sucesor: N → N
Funciones
• escero: N → B
• igual: N x N →B
• suma: N x N →N
• SEMANTICA ∀ m, n ∈ N
• 1. escero (cero) = true
• 2. escero (sucesor (n)) = false
• 3. igual (cero, n) = escero (n) Axiomas
• 4. igual (sucesor (n), cero) = false
• 5. igual (sucesor (n), sucesor (m)) = igual (n, m)
• 6. suma (cero, n) = n
• 7. suma (sucesor (m), n) = sucesor (suma (m, n))
Especificación Formal - Arreglos
Structure Array(Value,index)
Declare Create() Array
Retrive(Array,Index) Vakue
F Store(Array,Index,Value) Array
Funciones
Swap(Array,Index,Index) Array
Equal(index,index) Bolean
∀ A ∈ N i , j ∈ Index, x ∈ Value
Retrieve(Create,i)::= error
A Retrieve(Store(A,i,x),j)::= Axiomas
If Equal(i,j) Then x Else Retrieve(A,j)
Especificación Formal – TAD Polinomios
Operaciones
Evaluar P(2) = 50
Operaciones Binarias: C, P, Q ∈ Polinomios
C(x) = P(X) + Q(X)
Especificación Formal – TAD Polinomios
Structure Polinomio
Declare Zero() Poly //Define polinomio
Procedurre AddPoly()
C= Zero
While NOT (IsZero(A) and IsZero(B)) do
Case
:Exp(A)<Exp(B)
C=Attach(C, Coef(B,Exp(B)),Exp(B))
B=Rem(B,Exp(B))
:Exp(A)>Exp(B)
C=Attach(C,Coef(A,Exp(A)),Exp(A))
A=Rem(A,Exp(A))
:Exp(A)=Exp(B)
C=Attach(C,Coef(A,Exp(A))+ Coef(B,Exp(B)),,Exp(A))
A=Rem(A,Exp(A))
B=Rem(B,Exp(B))
End Case
End while
TAD – PILAS (Stacks)
Ilustración
Vehículos en un calle sin salida
A4 A3 A2 A1
Descripción. Una pila es una lista especial en la cual todas las inserciones y
eliminaciones tiene lugar en un extremo denominado Tope.
Tope
Structure Stack(item)
Declare Create() Stack
Add(item, Stack) Stack Funciones
F Delete(Stack) Stack
Top(Stack) item
Vacia(Stack) Bolean
∀ s ∈ Stack i ∈ Item
Vacia(Create(S))::= error
Vacia(Add(i,S))::= false
Axiomas
A Delete(Create(S))::=error
Top(Create(S))::=error Pila= D, F , A
Top(Add(i,S))::=i
D= stack, item,boolean
Implementación de TAD – PILAS usando vectores
1 2… max
top=0
Const
max = 100
Type
Pila = record
elemento: Array[1..max] of tipo_elemento
top :int
End record
Implementación de TAD – PILAS usando vectores
Ilustración
Vehículos en una gasolinera
A4 A3 A2 A1
Descripción. Una cola es una lista especial en la cual los elementos son
insertados en un extremo (posterior, rear) y son eliminados en el otro
extremo (frente, front) .
Front
(Elimina)
Es una lista de tipo FIFO (First-in First-out)
Rear
(Inserta)
Especificación Informal del TAD – COLA
Structure Cola(item)
Declare Create() Cola
Add(item, Cola) Cola Funciones
F Delete(Cola) Cola
Front(Cola) Cola
Vacia(Cola) Bolean
Especificación Forma del TAD – COLA
∀ Q ∈ Stack i ∈ Item
Vacia(Create(Q))::= true
Vacia(Add(i,Q))::= false
Axiomas
Delete(Create(Q))::=error
A Delete(Add,(i,Q))::=if Vacia(Q) then Create(Q) else Add(i,delete(Q))
Front(Create(Q))::=error
Front(Add(i,Q))::=if Vacia(Q) then i else Front(Q)
1 2… max
Q
top=0
Const
max = 100
Type
Cola = record
elemento: Array[1..max] of tipo_elemento
rear :int
front :int
End recor
Implementación de TAD – COLA usando vectores
1 2… max
Q
front=rear=max
Existe un problema cuando rear = max, ya no se pueden adicionar mas datos
Solucion PILA
CIRCULAR!!!
n-3
2
n-2
1 n-1
0
Q.elemento[Q.rear] = i else
¿Que pasa si se requiere mas de una Pila o mas de una Cola o ambas ?
Respuestas: Definir tal vez tantas pilas y colas se requieran
S1(1:n1)
S2(1:n2)
Q1(1:n1) y un conjunto de funciones para cada una
Ejemplo para dos Pilas
a) b)
1 2… n1 1 2… m
S1 V
top1=0 top2=0
top1=0
Para desarrollar
1 2… n2
¿Cuándo esta vacia? If top1, top2 = 0
S2
¿Cuándo esta llena? If top1+1 = top2
top2=0 ¿Cómo hacer las funciones Add y Delete?
MULTIPLES PILAS y COLAS
1 2… m
V El tamaño de cada pila Si será │m/n │
S1 s2 … Sn
1≤i≤n
ed = ∑i=1 X i
Add(x,i)
if T(i) = B(i+1) then
mensaje “pila llena”
n
else
Xi
i=1 T(i) = T(i) + 1
V(T(i)) = x
end if Desarrolle Múltiples Colas!!!!!
Implementar Add y Delete
Delete(i)
Que pasa si tengo Cola Circular
if T(i) = B(i) then
mensaje “pila vacia”
else
T(i) = T(i) - 1
end if