Sei sulla pagina 1di 5

UNIVERSIDAD CENTRAL DE VENEZUELA

FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y ESTRUCTURAS DE DATOS

PRÁCTICA DE COMPLEJIDAD EN ALGORITMOS RECURSIVOS

1. ¿El cálculo de la complejidad en un algoritmo recursivo se puede realizar de la misma forma que se realiza el cálculo
de un algoritmo iterativo? ¿Por qué?
2. Si la complejidad de un algoritmo recursivo tiene el mismo orden de complejidad que su implementación de forma
iterativa, ¿el número de iteraciones es igual? ¿el espacio que ocupan en memoria es el mismo?
3. Hallar el orden de complejidad en tiempo de la función potencia XY, con el algoritmo divide y conquista. Demuestre
que es O(log2n).Realice el mismo procedimiento con el algoritmo de búsqueda binaria.
4. La complejidad del algoritmo recursivo para el cálculo del factorial es O(n1.5). Realice los cálculos y demuestre la
veracidad o falsedad de la sentencia.
5. Haga el cálculo de la complejidad en tiempo para algoritmos conocidos como Máximo Común Divisor, factorial, Suma
de los primeros “n” números enteros
6. Calcule la complejidad en tiempo para los siguientes algoritmos:

 Function A ( integer n ) : integer  Function D ( integer n ) : integer


If( n==1) then Integer x, i, j;
return 1; If( n<=1) then
else return 1;
return ( n * A( n -1 )); else
EndIf x = B(n/2) + B(n/2);
EndFunction For i=1 to n do
For j=1 to n do
 Function B ( integer n ) : integer x = x + j;
Integer x, i; EndFor
If( n<=1) then EndFor
return 1; return x;
else
x = C(n / 2);  Function E ( integer n ) : integer
For i=1 to n do If( n==1) then
x = x + 1; return 1;
EndFor else
return x; return ( n * A( n -1 );
EndIf EndIf
EndFunction EndFunction

 Function C ( integer n ) : integer  Function F ( integer n ) : integer


If(n<=1) then Integer x, i;
return 1; If( n<=1) then
else return 1;
return (E(n-1) + E(n -1); else
EndIf x = A(n -1);
EndFunction For i=1 to n do
x = x + 1;
EndFor
return x;

EndIf

EndFunction
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y ESTRUCTURAS DE DATOS

7. Dado el siguiente algoritmo:

Function G (integer x) : Void


For i=1 to x do
For j=1 to i do
Print (i,j,x);
EndFor
EndFor
If (x>0) then
For i=1 to 4 do
G(x div 2);
EndFor
EndIF
EndFunction

Indique que hace el algoritmo.


a) Calcule la complejidad en tiempo del algoritmo.

8. Considere la siguiente función.

Function Raro(Ref Array a[1..N] of Integer, Integer prim, Integer ult) : Integer
Integer mitad, terc;
If prim>=ult Then
return a[ult]
endIf;
mitad =(prim+ult) div2;
terc = (ult-prim) div 3;
return a[mitad]+Raro(a,prim,prim+terc)+Raro(a,ult-terc,ult);

End Function;

a) Calcular el tiempo de ejecución de la llamada a la función Raro(a,1,N), suponiendo que N es potencia de 3.


b) Dar una cota de complejidad para dicho tiempo de ejecución.

9. Resuélvase la siguiente ecuación de recurrencia. ¿De qué orden es?

𝑎 𝑛=1
𝑡(𝑛) = { 2𝑡 (𝑛) + log 𝑛 𝑛>1
2
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y ESTRUCTURAS DE DATOS

10. Dado el algoritmo siguiente, que determina si una cadena C es palíndromo:

Funcion PAL (Ref Array C[1..N] of Caracter, Integer i, Integer j) : Bolean


if i≥j then
return true;
ElseIf C(i)≠C(j) then
return false;
else
return PAL(C, i+1, j-1)

EndIf

EndFunction

a) Analiza la evaluación de PAL(C, 1, n) en el caso peor y en el caso medio, suponiendo equiprobabilidad de


todas las entradas y siendo {a, b} el alfabeto que forma las cadenas

11. Considérese el algoritmo de ordenación siguiente.

Function TercioSort (Ref B in out Caracter, Integer I, Integer, J) : Void


Integer K = (J-I+1)/3;
If (B[I] > B[J]) Then
Intercanbiar (B,I,J)
EndIf
If (J-I+1) <=2 Then
return;
EndIf
TercioSort(B, I, J-K);
TercioSort(B, I+k, J);
TercioSort(B, I, J-K);
EndFunction

a) Analiza su tiempo de ejecución.

12. Di de qué orden es la siguiente recurrencia:


1 𝑛≤4
𝑡(𝑛) = { 𝑛
𝑡 ( ) + √𝑛 + 1 𝑛>4
4
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y ESTRUCTURAS DE DATOS

13. Es conocido que O(n) ⊂ O(n∗lgn) ⊂ O(n* √𝑛) ⊂ O(n2) ⊂ O(n3) . Clasifica O(T(n)) en esa cadena de inclusiones
siendo:
1 𝑛≤1
𝑡(𝑛) = { 𝑛
4∗𝑡( )+ 𝑛 𝑛>1
3
Tal vez te resulte útil saber que: log 3 4 = 1,26184

14. Calcula el orden temporal de los siguientes programas:

a. Function total (Integer n) : Integer


If (n==1) Then
return n;
Else
Total(n-1) + 2*parcial(n-1);
EndIf
EndFunction

Siendo :

Function parcial (Integer m) : Integer


If(m==1) Then
return 1
Else
2* parcial (m-1);
EndIf
EndFunction

b. Function total (Integer n, Integer m) : Integer


If(n==1) Then
return m;
Else
return m + total (n-1, 2*m);
EndIf
EndFunction
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y ESTRUCTURAS DE DATOS

15. Considera el algoritmo recursivo de búsqueda dicotómica en un vector ordenado:


(Si X no estuviera en el vector devuelve el índice 0):

Function BUSQ_DICO (Array T of Integer, Integer X, Integer i, Integer j, Ref


Integer Ind) : Void
If (i < j) Then
Integer k = (i+j) div 2;
If (T[k]==X) Then
Ind= k;
Else
If (T[K]< X ) Then
BUSQ_DICO (T, X, k+1, j, Ind);
Else
BUSQ_DICO (T, X, i , k-1, Ind);
EndIf
EndIf
Else
If (i==j and T[i]==X) Then
Ind = i;
Else
Ind = 0;
EndIF
EndFunction

Considérense dos implementaciones distintas del mismo algoritmo, en las cuales en una el paso de
parámetros del arreglo se realiza por referencia y en la otra por copia (o valor) ¿Habría alguna
diferencia en la eficacia temporal entre esas dos implementaciones?

Potrebbero piacerti anche