Analisis RFFP

También podría gustarte

Está en la página 1de 3

Tarea No.

01: Anlisis de Algoritmos a


Raul Mu oz n Felipe Prez e April 12, 2012

Problema No. 01
Algoritmo: int factorial( int a){ if a==1 || a==0 then return 1; else return a*factorial(a-1); } int coef_binomial(int n, int m){ return factorial(n)/(factorial(m)*factorial(n-m)) } Este algoritmo tiene complejidad O(n + n-m +m +2) = O (2n+2) debido a que la complejidad de una operacin factorial es de O (n) o sea T(n)= tiempo para calcular n!: T(n)= T(n-1) +1 si n>1 T(1)=1.

Disee un algoritmo que dertermine la combinatoria de n sobre m. n

T(n ) = T(n-1) +1 = T(n-2) +1) +1 = ((T(n-3)+1)+1)+1 ... = T(n-k) +k = T(1) + n-1 = T(0) +n =n

= T(n-2) +2 = T(n-3) + 3

luego la complejidad del algoritmo factorial recursivo es ~ O(n )

Problema No. 02

Dado un arreglo A de n elementos se desea rotar los elemntos m posiciones hacia adelante ( A[i]tendr ahora el valor que ten A[i+m]. Disee un algoritmo a a n que encuentre el nuevo arreglo A empleando solo memoria adicional para un elemento de A y que realice la m nima cantidad de intercambios). Algoritmo: void voltear(A[], int i, int j) { if (j<0) error; if (j>i) error;

if (i == j) return; while (i < j) { temp = A[i]; A[i] = A[j]; A[j] = temp; i++; j--; } } void rotar( A[], { voltear(A, 0, voltear(A, i, voltear(A, 0, } int n, int i) i-1); n-1); n-1);

Este algoritmo tiene complejidad de orden O (n) para la funcion rotar, se llama 3 veces a la funcion voltear con diferentes parmetros, contaremos las iteraciones para calcular el coste del por caso. a como la funcin voltear agranda el numero ms pequeo y achica el ms o a n a grande, hace la mitad de la diferencias de los parmetros en iteraciones. a los costes son: para la primera funcion voltear : i/2 para la segunda funcion voltear : (n-i)/2 para la tercera funcion voltear : n/2 al sumar estas 3 nos queda (i+n-i+n)/2 = n. restricciones: m no puede ser mayor que n, y no se pueden ingresar numeros negativos. 3

También podría gustarte