05.03.2015 Views

PRÁCTICA 4 - Universidad de Carabobo, FACYT - computacion

PRÁCTICA 4 - Universidad de Carabobo, FACYT - computacion

PRÁCTICA 4 - Universidad de Carabobo, FACYT - computacion

SHOW MORE
SHOW LESS

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!