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