PRÃCTICA 4 - Universidad de Carabobo, FACYT - computacion
PRÃCTICA 4 - Universidad de Carabobo, FACYT - computacion
PRÃCTICA 4 - Universidad de Carabobo, FACYT - computacion
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
PRÁCTICA 2. FUNDAMENTOS DE ANÁLISIS ASINTÓTICO DE ALGORITMOS<br />
UNIVERSIDAD DE CARABOBO<br />
FACULTAD EXPERIMENTAL DE CIENCIAS Y TECNOLOGÍA<br />
DEPARTAMENTO DE COMPUTACIÓN<br />
GRUPO DE DESARROLLO DE SOFTWARE Y SISTEMAS<br />
CS218 − ALGORITMOS Y PROGRAMACIÓN II<br />
PRÁCTICA 4<br />
(FUNDAMENTOS DE ANÁLISIS ASINTÓTICO DE ALGORITMOS)<br />
1. Suponga que para resolver un problema específico existen dos algoritmos P a y P b . El algoritmo P a tiene<br />
un tiempo <strong>de</strong> ejecución T a (n) = n 2 + 10 y el algoritmo P b tiene un tiempo <strong>de</strong> ejecución T b (n) = 200∗n + 4.<br />
¿Cuál <strong>de</strong> los dos algoritmos es más eficiente y por qué?<br />
2. Calcular la complejidad en tiempo <strong>de</strong>l peor caso <strong>de</strong> cada uno <strong>de</strong> los siguientes algoritmos. Exprese los<br />
resultados utilizando la notación O-gran<strong>de</strong>.<br />
a. proc mult_mat (in A, B : Matriz; out Res : Matriz);<br />
var<br />
i, j, k : Integer;<br />
begin<br />
for i ← 1 in n do<br />
for j ← 1 in n do<br />
Res[ i, j ] ← 0;<br />
for k ← 1 in n do<br />
Res[i,j] ← Res[i,j] + A[i,k] ∗ B[k,j]<br />
end_for;<br />
end_for;<br />
end_for;<br />
end;<br />
c. proc proc2 (in n : Integer);<br />
var<br />
i, j, sum : Integer;<br />
begin<br />
sum ← 0;<br />
for i ← 1 in n - 1 do<br />
for j ← 1 in 2∗n do<br />
sum ← sum + 1<br />
end_for;<br />
end_for;<br />
end;<br />
b. proc proc1 (in n : Integer);<br />
var<br />
i, j, k : Integer;<br />
begin<br />
for i ← 1 in n - 1 do<br />
for j ← i + 1 in n do<br />
for k ← 1 in j do<br />
p {p es una instrucción que<br />
requiere tiempo O(1)}<br />
end_for;<br />
end_for;<br />
end_for;<br />
end;<br />
d. función fact_iter (in n : Integer) :<br />
Integer;<br />
var<br />
i, fact : Integer;<br />
begin<br />
fact ← 1;<br />
if (n > 0) then<br />
for i ← 1 in n do<br />
fact ← i ∗ fact<br />
end_for;<br />
end_if;<br />
fact_iter ← fact<br />
end;<br />
e. función num_comb (in n, m : Integer) : Integer;<br />
var<br />
p, result1, result2, result3 : Integer;<br />
begin<br />
if (n < m) then<br />
num_comb ← 0<br />
else<br />
p ← n - m;<br />
result1 ← fact_iter(n);<br />
result2 ← fact_iter(m);<br />
result3 ← fact_iter(p);<br />
num_comb ← result1 div (result2 ∗ result3)<br />
end_if;<br />
end;<br />
f. función fib_iter (in n : Integer) :<br />
Integer;<br />
var<br />
i, aux, fib_menor, fib_mayor :<br />
Integer;<br />
begin<br />
if (n ≤ 1) then<br />
fib_iter ← 1<br />
else<br />
fib_menor ← 1;<br />
fib_mayor ← 1;<br />
for i ← 2 in n do<br />
aux ← fib_menor;<br />
fib_menor ← fib_mayor;<br />
fib_mayor ← aux + fib_menor<br />
end_for;<br />
fib_iter ← fib_mayor<br />
end_if;<br />
end;
PRÁCTICA 2. FUNDAMENTOS DE ANÁLISIS ASINTÓTICO DE ALGORITMOS<br />
g. proc proc3 (in n : Integer);<br />
var<br />
a, b, c, d, e : Integer;<br />
begin<br />
a ← 2; d ← 0; e ← 0;<br />
repetir<br />
if (a mod 2 = 0) then<br />
b ← 1;<br />
mientras (b ≤ a) do<br />
for c ← 0 in b + 1 do<br />
d ← d + 1;<br />
e ← e + b 2<br />
end_for;<br />
b ← b + 1;<br />
end_mientras;<br />
else<br />
e ← e + b 4<br />
end_if;<br />
a ← a + 1<br />
until (a > n)<br />
end;<br />
h. función fact_rec (in n : Integer) :<br />
Integer;<br />
begin<br />
if (n = 0) then<br />
fact_rec ← 1<br />
else<br />
fact_rec ← n ∗ fact_rec(n - 1)<br />
end_if;<br />
end;<br />
i. función rec1 (in n : Integer) : Integer;<br />
begin<br />
if (n ≤ 1) then<br />
rec1 ← 5<br />
else<br />
rec1 ← rec1(n - 1) + rec1(n - 1)<br />
end_if;<br />
end;<br />
j<br />
.<br />
función rec2 (in n : Integer) : Integer;<br />
begin<br />
if (n ≤ 1) then<br />
rec2 ← 1<br />
else<br />
rec2 ← 2 ∗ rec2(n div 2)<br />
end_if;<br />
end;<br />
k. proc rec3 (in n, x : Integer; out r : Integer);<br />
var<br />
i : Integer;<br />
begin<br />
if (n = 0) then<br />
r ← x<br />
else<br />
for i ← 1 in n do<br />
x ← x + 1<br />
end_for;<br />
rec3(n - 1, x, r)<br />
end_if;<br />
end;<br />
l<br />
.<br />
función fib_rec (in n : Integer) :<br />
Integer;<br />
begin<br />
if (n ≤ 1) then<br />
fib_rec ← 1<br />
else<br />
fib_rec ← fib_rec(n - 1) +<br />
fib_rec(n - 2)<br />
end_if;<br />
end;<br />
j. función rec4 (in n : Integer) : Integer;<br />
var<br />
i, res : Integer;<br />
begin<br />
if (n ≤ 1) then<br />
rec4 ← 100<br />
else<br />
res ← 0<br />
for i ← 1 in n do<br />
res ← res + i<br />
end_for;<br />
rec4 ← res + rec4(n div 2) +<br />
rec4(n div 2)<br />
end_if;<br />
end;<br />
3. Calcular la complejidad en espacio asociada a cada una <strong>de</strong> las siguientes estructuras <strong>de</strong> datos.
PRÁCTICA 2. FUNDAMENTOS DE ANÁLISIS ASINTÓTICO DE ALGORITMOS<br />
a.<br />
type<br />
var<br />
cantante = register<br />
nombre : ca<strong>de</strong>na[ 20 ];<br />
case type_cantante : (participante, invitado) <strong>de</strong><br />
participante : (país_origen : ca<strong>de</strong>na[ 20 ];<br />
nombre_canción : ca<strong>de</strong>na[ 40 ];<br />
autor : ca<strong>de</strong>na[ 20 ];<br />
puntos_obtenidos : Integer);<br />
invitado : (sexo : ( M, F ))<br />
end_case;<br />
end_register;<br />
festival : array [ 1 .. 30 ] <strong>de</strong> cantante;<br />
b.<br />
type<br />
materia = (m1, m2, m3, m4, m5, m6, m7, m8, m9, m10);<br />
asignatura = register<br />
nombre : ca<strong>de</strong>na[ 30 ];<br />
num_estudiantes : [ 0 .. 100 ];<br />
case type_materia : (obligatoria, electiva) <strong>de</strong><br />
obligatoria : (requisitos : array [ 1 .. 4 ] <strong>de</strong> materia);<br />
electiva : (area : (a1, a2, a3, a4, a5)<br />
end_case;<br />
end_register;<br />
var<br />
esc : array [ materia ] <strong>de</strong> asignatura;<br />
c.<br />
type<br />
tip_r1 = (a1, a2, a3, a4, a5, a6);<br />
tip_r2 = (b1, b2, b3, b4 , b5, b6, b7, b8);<br />
tip_r3 = (c1, c2, c3, c4);<br />
Fecha = register<br />
fregister;<br />
info_r1 = register<br />
fregister;<br />
info_r2 = register<br />
fregister;<br />
info_r3 = register<br />
fregister;<br />
dia : [ 1 .. 31 ];<br />
mes : [ 1 .. 12 ];<br />
año : [ 1950 .. 2100 ]<br />
categoría : (ca1, ca2, ca3);<br />
cantidad : Integer;<br />
lote : Integer;<br />
costo : Real<br />
categoría : (cb1, cb2, cb3, cb4);<br />
cantidad : Integer;<br />
fecha_vencimiento : Fecha;<br />
costo : Real<br />
categoría : (cc1, cc2, cc3);<br />
peso : Real;<br />
lote : Integer;<br />
costo : Real<br />
R = register<br />
r1 : array [ tip_r1 ] of info_r1;<br />
r2 : array [ tip_r2 ] of info_r2;<br />
r3 : array [ tip_r3 ] of info_r3<br />
fregister;<br />
var
inventario : R;<br />
PRÁCTICA 2. FUNDAMENTOS DE ANÁLISIS ASINTÓTICO DE ALGORITMOS
PRÁCTICA 2. FUNDAMENTOS DE ANÁLISIS ASINTÓTICO DE ALGORITMOS<br />
d.<br />
type<br />
dígitos = [ 0 .. 9 ];<br />
<strong>de</strong>pen<strong>de</strong>ncias = (jurídica, endanciera, personal, planificación, administración, mantenimiento,<br />
publicidad);<br />
Fecha = register<br />
dia : [ 1 .. 31 ];<br />
mes : [ 1 .. 12 ];<br />
año : [ 1950 .. 2100 ]<br />
fregister;<br />
datos = register<br />
nombre : ca<strong>de</strong>na[ 30 ];<br />
cédula : ca<strong>de</strong>na[ 15 ];<br />
case sexo : (masculino, femenino) of<br />
masculino : (profesión : ca<strong>de</strong>na[ 30 ];<br />
case ocupación : (obrero, empleado, ejecutivo) of<br />
obrero : (num_horas_semanales : Integer);<br />
empleado : (sueldo : Real;<br />
años_empresa : Integer);<br />
ejecutivo : (<strong>de</strong>pen<strong>de</strong>ncia : <strong>de</strong>pen<strong>de</strong>ncias)<br />
fcase;<br />
fregister;<br />
fcase;<br />
femenino :<br />
(num_hijos : Integer;<br />
edad : [ 1 .. 70 ];<br />
case estado_civil : (soltera, casada, divorciada) of<br />
soltera : (estatura, peso : Real);<br />
casada : (nombre_esposo : ca<strong>de</strong>na[ 20 ]);<br />
divorciada : (fecha_divorcio : Fecha)<br />
fcase;<br />
emps = array [ 1 .. 5000 ] of datos;<br />
empresa = register<br />
fregister;<br />
nombre : ca<strong>de</strong>na[ 30 ];<br />
empleados : emps<br />
var<br />
REY_Computers : empresa;