EJERCICIOS (tipo parcial)

Anuncio
EJERCICIOS (tipo parcial)
I. Diga cuántas multiplicaciones hace el siguiente algoritmo, como función de n. Encuentre una expresión cerrada
fun g(n:entero): entero
Si n≤ 1 entonces devolver n
Sino devolver(5*g(n­1)­6g(n­2))
FinSi
FinFun
II. Analice en tiempo y en espacio el siguiente algoritmo de ordenamiento. Suponga que la operación básica es la
comparación entre elementos del vector global A[1..n]. Plantee una ecuación recurrente para la complejidad temporal y
resuélvala. proc sort(n:entero)
Si n>1 entonces
Para j=1 hasta n­1 haga
Si A[j]>a[j+1] entonces
intercambiar(j,j+1)
FinSi
FinPara
sort(n­1)
FinSi
FinProc
III. Analice el siguiente algoritmo para multiplicación de números naturales
fun multiplicar(a,b:natural): entero
Si b=0 entonces devolver 0
Sino
Si b es impar entonces
Devolver (multiplicar(2a,b/2)+a)
Sino
Devolver (multiplicar(2a, b/2))
FinSi
FinSi
FinFun
IV. Considere el siguiente algoritmo de pattern­matching (correspondencia de patrones). La entrada consiste de una cadena
de caracteres S[1..n], y un patrón P[0..m­1], donde 1≤m≤n. El algoritmo localiza la primera ocurrencia contigua del patrón
P en la cadena S, es decir, L=p si S[p..p+m­1]=P, y L=n­m+1 si el patrón P no ocurre en ninguna parte de la cadena S.
Analice la complejidad temporal del peor caso de este algoritmo como función de n únicamente.
fun match(P: array[ 0..m­1] of char; S: array[1..n] of char; n,m:integer)
var L,r: integer;
var matched: bool;
{
L:=0; matched:=false;
while (L≤n­m) y ¬matched do
L:=L+1;
r:=0; matched:=true;
while (r<m) y matched do
matched:=matched y (P[r]=S[L+r]);
r:=r+1;
return (L);
}
V. Resolver la siguiente ecuación de recurrencia, siendo n potencia de 2.
T(1) = 1
T(2) = 3/2
T(n) = (3/2)T(n/2) – ( 1/2)T(n/4) – 1/n
,
si n>2
Descargar