Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRACTICA
CURSO : Diseño y Análisis de Algoritmos.
No. : Práctica No. 03
TEMA : Práctica de Algoritmos Recursivos
DURACIÓN ESTIMADA : 50 minutos aproximadamente.
I. Objetivos
II. Resumen
Emplear adecuadamente las matemáticas para encontrar la función tiempo que representa al
algoritmo recursivo que se asocien a las funciones conocidas.
Exponenciación
Sean a y n dos enteros. Deseamos calcular la exponenciación x = an. Por sencillez
supondremos en toda esta sección que n>0. Si n es pequeño, el algoritmo siguiente resulta
adecuado:
Método CNúmero.Potencia(a, n)
Rpta 1 t=1
Para x desde 1 hasta n hacer
Rpta Rpta * n t = 6n + 4 ∑𝑛𝑥=1 6 + 4 = 6𝑛 + 4
fPara
Retornar Rpta t=1
fMétodo
• Este algoritmo requiere un tiempo que está en (n), puesto que la instrucción
Página. 1
Universidad Nacional Mayor de San Marcos
Facultad de Ingeniería de Sistemas e Informática
Escuela de Ingeniería de Sistemas
• Se ejecuta exactamente n veces, siempre y cuando las multiplicaciones cuenten como opera-
ciones elementales (los factores que interviene en la multiplicación sean de un digito).
• Si deseamos manejar operandos más grandes, es preciso tener en cuenta el tiempo necesario
para la multiplicación.
a n =1
a n = (a n / 2 )
2
n, par
(a ( n −1) / 2 )2 a 1
n, impar
Método CNúmero.Potencia(n) →
// a es el atributo con el Valor del Número.
// n es el exponente de la exponenciación.
Si (n = 1) entonces t=1
Retornar n t=1
Sino
Objeto Num ejemplar-de CNúmero t=1
Si (n mod 2 = 0) entonces t=2
Retornar [Num.ExpoDV(n/2)]2 t=3
sino
Retornar a * [Num.ExpoDV((n – 1)/2)]2 t=4
fSi
fSi
fMetodo
Análisis:
• Tenemos que todas las instrucciones a excepción de las llamadas recursivas tienen un tiempo
constante de 1. (incluyendo la multiplicación cuando n es impar)
• Entonces tenemos la función tiempo T(n) = f(n) + t(n/2), donde f(n) es el tiempo del algoritmo
Potencia sin tomar en cuenta las llamadas recursivas, y t(n/2) es el tiempo de la primera llamada
recursiva. Por lo tanto, T(n) = 4 + t(n/2) ...(A)
• Para las llamadas recursivas se tiene que se efectúa una llamada u otra.
Página. 2
Universidad Nacional Mayor de San Marcos
Facultad de Ingeniería de Sistemas e Informática
Escuela de Ingeniería de Sistemas
• En la segunda llamada recursiva se tiene que (Potencia((n – 1)/2))2 se tiene un tiempo de n/2 -
1 comparaciones para un n impar.
Así sucesivamente:
t(n/2) + t(n/4) + t(n/8) + ... + t(2) = 4+ 4+ 4+ ... + 4 + t(n/4) + t(n/8) + ... + t(n/2k)
Entonces:
(C) en (B)
t(n/2) = 4 + 4 + 4 + ... + 4 + t(1) .. (D)
(D) en (A)
• Siempre y cuando el número de dígitos de los multiplicando sean pequeños, en caso contrario
su tiempo será de cómo mínimo n.
Factoriales
1 n =1
f (n) =
n * (n − 1)! n 1
• Entonces, podemos plantear el siguiente ejemplo:
Página. 3
Universidad Nacional Mayor de San Marcos
Facultad de Ingeniería de Sistemas e Informática
Escuela de Ingeniería de Sistemas
Método CNúmero.FactorialRec()
Si (n <= 1) entonces t=1
Página. 4
Universidad Nacional Mayor de San Marcos
Facultad de Ingeniería de Sistemas e Informática
Escuela de Ingeniería de Sistemas
Análisis:
• Para la primeras instrucciones cuando n es 1 o 0 tenemos O(1)
• Para la llamada recursiva tenemos T(n) = 2 + T(n-1) para n > 1 ... (A)
Página. 5
Universidad Nacional Mayor de San Marcos
Facultad de Ingeniería de Sistemas e Informática
Escuela de Ingeniería de Sistemas
Página. 6