Está en la página 1de 5

Ejercicios Complejidad de algoritmos

Claudio Henrquez Berroeta

I. Complejidad de Algoritmos
1. Calcular el tiempo de ejecucin T(n) para el algoritmo Cosa(n,A). Identifique claramente el tiempo
que consider para cada instruccin.
PROCEDURE Cosa(n: integer;A: array [0..n, 0..n] of integer);
var
i, j: integer;
begin
i:= 1;
repeat
A[i, 0]:= 0;
for j:= 1 to i do begin
A[i, j]:= 0;
Rec (i);
end;
i:= i+1;
until i>=n;
end;

PROCEDURE Rec (n: integer);


begin
if n=1 then
A[n, n]:= A[n, n]+1;
else begin
Rec (n-1);
Rec (n-1);
end;
end;

2. Calcular el tiempo de ejecucin T(n) y orden O para el algoritmo DivVenc(i,j), considerando que el
costo de la funcin Operacin es 1 y que la entrada inicial es i=1 y j=n. Identifique claramente el
tiempo que consider para cada instruccin.
PROCEDURE DivVenc (i, j: integer)
PROCEDURE Combina (i, j: integer)
if (i = j) then
for k:= i to j do
Combina (i, j);
for q:= i to j do
else begin
Operacion(i, j, k, q);
m:= ( i+j ) / 2;
a:= ( j i ) / 4;
DivVenc (i, m);
DivVenc (i+a, m+a);
DivVenc (m+1, j);
Combina (i, j);
end;
3.
Calcular el tiempo de ejecucin y Orden de la funcin misterio, asuma la declaracin de
variables con costo cero.
int misterio(int n){
int i,j,k,s;
s:=0;
for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
for(k=1; k<=j; k++)
s=s+2;
return s;
}

Ejercicios Complejidad de algoritmos

Claudio Henrquez Berroeta

4.
Calcular el tiempo de ejecucin T(n) para el algoritmo Primero(n). Identifique claramente el
tiempo que consider para cada instruccin.
PROCEDURE Primero (n: integer);
var
i: integer;
acum: real;
begin
if n>0 then begin
acum:= 0;
for i:= 1 to 2 do
acum:= acum+Segundo(n);
write (acum);
end;
end;
5.

Function Segundo (x: integer):real;


var
j,k:integer;
begin
k:=0;
for i=1 to x do
k:=k+random(100);
Primero(x div 2);
Primero(x div 2);
Segundo:=k/x;
end;

Segn la definicin de la funcin de ackerman:

a. Realizar la traza para m=2 y n=1. Debe incluir desarrollo.


b.Escribir una funcin recursiva en C (ANSI) o java ackerman(m,n), que permita obtener su
resultado a partir de dos nmeros enteros positivos.
c. Obtener su complejidad.
6.

Encuentre la ecuacin de recurrencia y el Orden del siguiente algoritmo:

boolean Bsqueda (Vector A, int iz, int de, TipoElemento x)


{ int mitad;
if (iz > de)
return (False);
else {
mitad = (iz + de) / 2;
if (A[mitad] == x)
return(True);
else
if (A[mitad] > x)
return (Bsqueda(A, iz, mitad-1, x));
else
return (Bsqueda(A, mitad+1,de,x));
}
}

Ejercicios Complejidad de algoritmos

Claudio Henrquez Berroeta

7. Suponga que la entrada de un cierto problema P tiene tamao n para resolverlo se encuentra en la
literatura las siguientes alternativas:
Alternativa A: algoritmo de tiempo On nlogn2n
Alternativa B: transformarlo en otro problema para el cual se conoce un algoritmo de tiempo
On3 n2 n , la transformacin demora On log n2
Alternativa C: modelarlo en un rbol binario de n niveles y ejecutar por cada nodo del rbol un
algoritmo de tiempo On2 Qu alternativa escoge Ud.?
8.

Encuentre la ecuacin de recurrencia y el Orden del siguiente algoritmo:

boolean Bsqueda (Vector A, int iz, int de, TipoElemento x)


{ int mitad;
if (iz > de)
return (False);
else {
tercio = (iz + de) / 3;
if (A[tercio] == x)
return(True);
else
if (A[tercio] > x)
return (Bsqueda(A, iz, tercio-1, x));
if (A[tercio] <x && A[tercio*2] >x)
return (Bsqueda(A, tercio+1, 2*tercio-1, x));
else
return (Bsqueda(A, 2*tercio+1,de,x));
}
}
9.
Calcular el tiempo de ejecucin T(k) y Orden para el algoritmo Div23(k). Identifique claramente
el tiempo que consider para cada instruccin. Suponer que la operacin EsPrimo(x) requiere un
tiempo constante.
PROCEDURE Div23 (k: integer);
begin
if k <=1 then
write (Acaba la recursividad)
else
if EsPrimo(2k-1) then
Div23 (k/2)
else begin
Div23 (k div3);
Div23 (k div3+1);
end;
end;

Ejercicios Complejidad de algoritmos

Claudio Henrquez Berroeta

10. Calcular el tiempo de ejecucin y orden O del siguiente cdigo.


Suma = 0;
i = 0;
while (i < n) {
j = 0;
while (j < n) {
Suma = Suma + Matriz[i][j];
j ++;
}
i++;
}
11.

Para un problema de entrada de tamao n se tienen 3 alternativas para resolverlo:

Alternativa A: algoritmo de tiempo O ( n 3 +nlog ( n3 ) )


Alternativa B: transformarlo en otro problema para el cual se conoce un algoritmo de tiempo
O ( n2 + n ) , la transformacin demora O ( nlog n ) .
Alternativa C: modelarlo en un rbol binario con n vrtices y ejecutar por cada vrtice del rbol un
algoritmo de tiempo O ( ( log n ) 3+n n ) .
Qu alternativa considera la ms eficiente?
12.

Resolver la ecuacin recurrente: t(n) 2t(n-1) = n + 2n, con n > 0, y t(0) = 0.

13.
Suponga que la entrada de un cierto problema P tiene tamao n para resolverlo se encuentra en
la literatura las siguientes alternativas:
Alternativa A: algoritmo de tiempo
Alternativa B: transformarlo en otro problema para el cual se conoce un algoritmo de tiempo
la transformacin demora
Alternativa C: modelarlo en un rbol binario de n vrtices y ejecutar por cada nivel del rbol un
algoritmo de tiempo
Qu alternativa escoge usted?

Ejercicios Complejidad de algoritmos

14.

Calcular el tiempo de ejecucin del procedimiento Algoritmo (1 punto)

procedure Algoritmo (x: array [1..MAX, 1..MAX] of real; n: integer)


var
i, j: integer;
a, b, c: array [1..MAX, 1..MAX] of real;
begin
if n > 1 then begin
for i:= 1 to n div 2 do
for j:= 1 to n/2 do begin
a[i, j]:= x[i, j];
b[i, j]:= x[i, j + n div 2];
c[i, j]:= x[i+n div 2, j];
end;
Algoritmo (a, n div 2);
Algoritmo (b, n div 2);
Algoritmo (c, n div 2);
end;
end;

Claudio Henrquez Berroeta