mod ayed tema 7
DESCRIPTION
Tema 7 de Algoritmos y Estructuras de datosTRANSCRIPT
![Page 1: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/1.jpg)
“Tema 7. Pilas y Colas (Stack and Queues)”
UNIVERSIDAD AUTONOMA GABRIEL RENE MORENOFACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIAS
Carrera de Ingeniería Informática
Docente: Ing. Ubaldo Pérez Ferreira
E-mail: [email protected]
Seminario de Grado
Modulo: Algoritmos y Estructura de Datos
Santa Cruz de la Sierra – Bolivia © 2008
![Page 2: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/2.jpg)
Abstracción
• Abstraer: Eliminar lo irrelevante y quedarnos con lo realmente importante.
• ¿Qué es lo importante?– En cada parte del trabajo puede serlo cosas
distintas
• Para llevar a cabo la abstracción los lenguajes nos proporcionan mecanismos:– Módulos, clases, genericidad, ocultación,
encapsulación, ...
![Page 3: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/3.jpg)
Abstracción
• El diseño de programas está basado en el uso de abstracciones. Se trata de:
• 1. Identificar los subproblemas.• 2. Especificación abstracta de cada uno de
ellos.• 3. Implementar cada abstracción.• 4. Verificación del programa.
![Page 4: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/4.jpg)
Especificaciones informales.
La descripción de una abstracción se realiza con un lenguaje natural (ambiguas e imprecisas).
Notación de espeficicación:Partes que debe tener la especificación,
Significado y tipo de cada parte,
Partes que pueden ser opcionales, ...
![Page 5: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/5.jpg)
Especificaciones informales.
• Notación• Operación <nombre> (ent <id>: <tipo>;...; sal
<tipores>)
– Requiere: establece restricciones de uso.– Modifica: identifica los datos de entrada que se
modifican.– Calcula: descripción textual del resultado de la
operación.– Requiere y Modifica, y los parámetros de entrada y
salida son opcionales.– Puede ser parametrizada:– Operación <nombre> [<id>:<tipo>;...] (...
![Page 6: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/6.jpg)
Especificaciones informales.
Ejemplo: concatenar dos cadenas.
– Operación concat (ent a,b: cadena; sal c: cadena)
– Calcula: la cadena de salida c es una nueva cadena que contiene los caracteres de a (en el mismo orden) seguidos de los caracteres de b (en el mismo orden).
![Page 7: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/7.jpg)
Especificaciones Formales.
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.
![Page 8: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/8.jpg)
Especificaciones Formal – Numeros Naturales
NOMBRE natural• CONJUNTOS N conjunto de naturales, B conjunto de valores booleanos• SINTAXIS• cero: N• sucesor: N N• 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)• 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))
Funciones
Axiomas
![Page 9: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/9.jpg)
Especificación Formal - Arreglos
Structure Array(Value,index)
Declare Create() Array
Retrive(Array,Index) Vakue
Store(Array,Index,Value) Array
Swap(Array,Index,Index) Array
Equal(index,index) Bolean
A N i , j Index, x Value
Retrieve(Create,i)::= error
Retrieve(Store(A,i,x),j)::=
If Equal(i,j) Then x Else Retrieve(A,j)
F
A
Funciones
Axiomas
![Page 10: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/10.jpg)
Especificación Formal – TAD Polinomios
P(x) = 5x3 + 3x2 – 2x + 2
Operaciones
Evaluar P(2) = 50
Operaciones Binarias: C, P, Q Polinomios
C(x) = P(X) + Q(X)
![Page 11: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/11.jpg)
Especificación Formal – TAD Polinomios
Structure Polinomio
Declare Zero() Poly //Define polinomio
Iszero(Poly) Boolean //Esta vació el Polinomio
Coef(Poly, exp) coef //Obtiene el coef. del Polinomio
Attach(Poly, coef, exp) Poly //Adiciona un elemento al Polinomio
Rem(Poly, exp) Poly //Elimina un elemento del Polinomio
Smult(Poly, coef, exp) Poly // Multiplicación por un monomio
Add(Poly, Poly) Poly //Adición de Polinomios
Mult(Poly, Poly) Poly //Multiplicación de Polinomios
F
Podemos Especificar un TAD para los Polinomios
![Page 12: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/12.jpg)
Especificación Formal – TAD Polinomios
P,Q Poly c , d coef, e,f exp
Rem(Zero, f)::= Zero
Rem( Attach( P, c, e ),f)::=
If e=f Then Rem(P,f) Else Attach(Rem(P,f),c,e)
Iszero(Zero)::=true
Iszero(Attach(P,c,e))::= If Coef(P,e)=-c then Iszero(Rem(P,e)) else false
Coef(Zero,e)::=0
Coef(Attach(P,c,e),f)::= If e=f then c + Coef(P,f) else Coef(P+f)
Smult(Zero,d,f)::=Zero
Smult(Attach(P,c,e),d,f)::= Attach(Smult(P,d,f), cxd, e+f)
Add( P, Zero )::=P
Add(P,Attach( Q,d,f))::=Attach(Add(P,Q),d,f)
Mult(P,Zero)::=Zero
Mult(P,Attach(Q,d,f))::= Add(Mult(P,Q),Smult(P,d,f)
A
![Page 13: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/13.jpg)
Ejercicio de Especificación Formal – TAD Polinomios
Dado el Polinomio P(x)= 3x6+2x4+3 y el polinomio Q(x)=3x-1 cual es el resultado de aplicar las siguientes expresiones utilizando las Funciones y Axiomas del TAD Polinomio
Rem(P, f)
Rem(Attach(P,-8,5,),0)
Iszero(Attach(P,0,0))
Smult(Zero,3,6)
Smult(Attach(P,2,2),1,1)
Attach(Smult(P,1,1), 1*2, 2+1)
Add( P, Zero )
Add(P,Attach( P,3,2))
Attach(Add(P,Q),3,2)
Mult(P,Zero)
Mult(P,Attach(Q,4-2,3))
Add(Mult(P,Q),Smult(P,4-2,3)
![Page 14: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/14.jpg)
Ejercicio de Especificación Formal – TAD Polinomios
Dado el Polinomio P y Q, diseñar el algoritmo para sumar dos polinomios (AddPoly), utilizando las Funciones y Axiomas del TAD Polinomio. Se debe considerar la función Exp(Poly) la misma que obtiene el grado de un polinomio o exponente mayor.
Procedurre AddPoly()C= ZeroWhile 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 CaseEnd while
![Page 15: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/15.jpg)
TAD – PILAS (Stacks)
Ilustración
Vehículos en un calle sin salida
A1A2A3A4
Descripción. Una pila es una lista especial en la cual todas las inserciones y eliminaciones tiene lugar en un extremo denominado Tope.
Tope
Es una lista de tipo LIFO (Last-in First-out)
![Page 16: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/16.jpg)
Especificación Informal del TAD – PILAS (Stacks)
Sea S una Pila, a menudo se incluye las siguientes operaciones
Create(S)
Drop(S)
Top(S)
Delete(S)
Vacia(S)
Add(i, S)
Creas una Pila S, se debe asegurar que S no exista.
Destruye la Pila S, es decir la Pila ya no existe.
Toma el elemento Tope de la Pila, sin sacarlo de ella, la Pila S debe existir y ≠ 0 .
Elimina el elemento Tope de la Pila, la Pila S debe existir y ≠ 0 .
Devuelve TRUE si S no contiene elemento, de lo contrario FALSE.
Inserta el elemento i en la parte superior de S, el anterior Tope se convertirá en el siguiente elemento. La Pila S debe existir.
![Page 17: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/17.jpg)
Especificación Forma del TAD – PILAS (Stacks)
Structure Stack(item)
Declare Create() Stack
Add(item, Stack) Stack
Delete(Stack) Stack
Top(Stack) item
Vacia(Stack) Bolean
s Stack i Item
Vacia(Create(S))::= error
Vacia(Add(i,S))::= false
Delete(Create(S))::=error
Top(Create(S))::=error
Top(Add(i,S))::=i
F
A
Funciones
Axiomas
D= stack, item,boolean
Pila= D, F , A
![Page 18: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/18.jpg)
Implementación de TAD – PILAS usando vectores
top=0
1 2 … max
Const
max = 100
Type
Pila = record
elemento: Array[1..max] of tipo_elemento
top :int
End record
![Page 19: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/19.jpg)
Implementación de TAD – PILAS usando vectores
Function Create(var P: Pila)
P.tope=0
End function
Function Drop(var P:Pila)
P.top=0
End Function
Function Vacia(var P: Pila): boolean
if P.top=0 then
Vacia = True
return
else
Vacia=false
return
end if
End function
Function Top(var P:Pila): Tipo_elemento
Top=P.elemento[P.top]
End Function
![Page 20: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/20.jpg)
Implementación de TAD – PILAS usando vectores
Function Add(var E:Tipo_elemento, P: Pila)
P.top=P.top + 1
P.elemento[P.top]=E
End function
Function Delete(var P:Pila)
P.top=P.top - 1
End Function
![Page 21: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/21.jpg)
TAD – COLAS (Queue)
Ilustración
Vehículos en una gasolinera
A1A2A3A4
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)
![Page 22: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/22.jpg)
Especificación Informal del TAD – COLA
Sea Q una Cola, a menudo se incluye las siguientes operaciones
Create(Q)
Drop(Q)
Front(Q)
Delete(Q)
Vacia(Q)
Add( Q, E)
Creas una cola Q, se debe asegurar que Q no exista.
Destruye la Cola Q, es decir Q ya no existe.
Toma el primer elemento de Q, sin sacarlo de ella, Q debe existir y ≠ 0 .
Elimina el elemento del Front de Q, además Q debe existir y ≠ 0 .
Devuelve TRUE si Q no contiene elemento, de lo contrario FALSE.
Inserta el elemento E en la parte posterior de Q.
![Page 23: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/23.jpg)
Especificación Forma del TAD – COLA
Structure Cola(item)
Declare Create() Cola
Add(item, Cola) Cola
Delete(Cola) Cola
Front(Cola) Cola
Vacia(Cola) Bolean
FFunciones
![Page 24: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/24.jpg)
Especificación Forma del TAD – COLA
Q Stack i Item
Vacia(Create(Q))::= true
Vacia(Add(i,Q))::= false
Delete(Create(Q))::=error
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)
A
Axiomas
D= cola, item, boolean Cola= D, F , A
![Page 25: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/25.jpg)
Implementación de TAD – COLA usando vectores
top=0
1 2 … max
Const
max = 100
Type
Cola = record
elemento: Array[1..max] of tipo_elemento
rear :int
front :int
End recor
Q
![Page 26: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/26.jpg)
Implementación de TAD – COLA usando vectores
Function Create(var Q: Cola)
Q.tope = 0
Q.front = 0
End function
Function Drop(var Q:Cola)
Q.tope = 0
Q.front = 0
End Function
Function Vacia(var Q: Cola): boolean
if Q.front = Q.rear then
Vacia = True
else
Vacia=false
end if
End function
Function Front(var Q:Cola): Tipo_elemento
If Vacia(Q) then
error “Cola vacia”
else
Front=Q.elemento[Q.front + 1]
end if
End Function
![Page 27: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/27.jpg)
Implementación de TAD – COLA usando vectores
Function Add(var i:Tipo_elemento, Q: Cola)
if Q.rear = max then
Mensaje “Pila llena”
else
Q.rear = Q.rear + 1
Q.elemento[Q.rear] = i
end if
End function
Function Delete(var Q:Cola)
if Q.front = Q.rear then
Mensaje “Pila vacia”
else
Q.front = Q.front + 1
end if
End Function
![Page 28: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/28.jpg)
Implementación de TAD – COLA CIRCULAR usando vectores
front=rear=max
1 2 … max
Existe un problema cuando rear = max, ya no se pueden adicionar mas datos
Q
01
2
n-1n-2
n-3
Solucion PILA CIRCULAR!!!
Estado inicial de la Cola Q
![Page 29: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/29.jpg)
Implementación de TAD – COLA CIRCULAR usando vectores
01
2
n-1n-2
n-3
Otra forma de hacer girar la COLA
(Q.rear + 1) mod n // para el rear
(Q.Front + 1) mod n // para front
Para que gire la COLA
If Q.rear = n-1 then
Q.rear = 0
Else
Q.rear=Q.rear + 1
End if
![Page 30: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/30.jpg)
Implementación de TAD – COLA CIRCULAR usando vectores
Function Add(var i:Tipo_elemento, Q: Cola)
Q.rear = (Q.rear + 1) mod n
if Q.front = Q.rear then
Mensaje “Pila llena”
else
Q.elemento[Q.rear] = i
end if
End function
Function Delete(var Q:Cola)
if Q.front = Q.rear then
Mensaje “Pila vacia”
else
Q.front = (Q.Front + 1) mod n
end if
End Function
Los Algoritmos Add y Delete quedarian de la siguiente manera
Al ejecutar Add y Delete nos econtramos con un problema cuando Q.front = Q.rear ¿Esta llena o vacía la Cola?
![Page 31: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/31.jpg)
Implementación de TAD – COLA CIRCULAR usando vectores
Function Add(var i:Tipo_elemento, Q: Cola)
if Q.c=n then
Mensaje “Cola llena”
else
Q.rear = (Q.rear + 1) mod n
Q.elemento[Q.rear] = i
Q.c = Q.c + 1
end if
Const
max = 100
Type
Cola = record
elemento: Array[1..max] of tipo_elemento
rear: int
front: int
c: int
End recor
Mejorando los algoritmos Add y Delete cuando Q.front=Q.rear, se adiciona un contador c
Hacer la prueba de escritorio!!!!
Function Delete(Q: Cola)
if Q.c=0 then
Mensaje “Cola vacio”
else
Q.front = (Q.front + 1) mod n
Q.elemento[Q.rear] = i
Q.c = Q.c - 1
end if
![Page 32: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/32.jpg)
MULTIPLES PILAS y COLAS
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
¿Que pasa si se requiere mas de una Pila o mas de una Cola o ambas ?
top1=0
1 2 … n1 S1
top2=0
1 2 … n2
S2
Ejemplo para dos Pilas
1 2 … m
V
top1=0 top2=0
Para desarrollar
¿Cuándo esta vacia? If top1, top2 = 0
¿Cuándo esta llena? If top1+1 = top2
¿Cómo hacer las funciones Add y Delete?
a) b)
![Page 33: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/33.jpg)
MULTIPLES PILAS y COLAS
Que sucede si queremos alamcenar n Pilas
1 2 … m
V
S1 s2 … Sn
1≤i≤n
El tamaño de cada pila Si será │m/n │
Se utilizaran dos arreglos adicionales
B(1:n+1) para almacenar el inicio y el fin de las pilas
Si = B(i) a B(i+1) tamaño de cualquier Si
T(1:n+1) para almacenar el estado del puntero Top de cada pila Si
Al crear las n pilas el estado de B y T sera:
B(i) = T(i) = │m/n │(i-1) 1≤i≤n
Para B(n+1) = m por si existe division fragmentada de │m/n │
![Page 34: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/34.jpg)
MULTIPLES PILAS y COLAS
Algunas consultas sobre multiples Pilas
¿Cuál es el espacio libre de cualquier pila Si?
Xi = B(i+1) – T(i)
¿Cuál es el espacio disponible en toda la lista V?
ed = ∑¿Cuántas celdas ocupadas existen V?
edv = m – ed
¿Cuándo esta vacia una pila Si?
if T(i) = B(i) then
¿Cuándo esta vacia una pila Si?
if T(i) = B(i+1) then
n
i=1
Xi
![Page 35: MOD AyED Tema 7](https://reader035.vdocuments.site/reader035/viewer/2022062318/55294de9550346a82e8b4704/html5/thumbnails/35.jpg)
MULTIPLES PILAS y COLAS
Los algoritmos para Add y Delete para multiples Pilas
Add(x,i)
if T(i) = B(i+1) then
mensaje “pila llena”
else
T(i) = T(i) + 1
V(T(i)) = x
end if
Delete(i)
if T(i) = B(i) then
mensaje “pila vacia”
else
T(i) = T(i) - 1
end if
n
i=1
Xi
Desarrolle Múltiples Colas!!!!!
Implementar Add y Delete
Que pasa si tengo Cola Circular