Guia de Analisis
Guia de Analisis
Guia de Analisis
¿Por que factor debería multiplicar la velocidad de su ordenador para que volviera a
tardar una milésima de segundo? Nota: 1 año = 31.557.600 segundos.
Donde c es un valor real positivo y n0 un valor entero positivo. Ya que nos dicen lo
que tarda el algoritmo para un determinado tamaño, podemos calcular el valor de la
constante c (en realidad no su valor, sino una cota inferior) para cada uno de los algoritmos
del enunciado:
Se han utilizado los subíndices 1,2 y 3 para referirse a los tiempos y las constantes
de cada uno de los tres algoritmos que se mencionan en el enunciado. Conocido el valor de
la constante, ya podemos calcular cotas superiores para el tiempo que empleará cada
algoritmo en resolver un problema de un tamaño distinto (en este caso 30):
Para el primer algoritmo, el objetivo de que el tiempo vuelva a ser de una milésima
de segundo es perfectamente posible con los ordenadores actuales. Para el segundo
algoritmo, sería necesario utilizar uno de los mejores superordenadores existentes en la
actualidad. Para el tercer algoritmo, sin embargo, sería necesario desarrollar una nueva
tecnología, ya que con la actual es imposible (debido a los límites que impone la física)
crear ordenadores tan rápidos.
2.-Calcular el orden de complejidad de las siguientes funciones recursivas (contar sólo las
operaciones producto):
def f1(n):
if n < 1:
return 1
else:
return f1(n - 3) * f1(n - 3)
def f2(n):
if n < 1:
return 1
else:
return f2(n / 2) * f2(n / 2)*f2(n / 2)
def f3(n):
if n < 1:
return 1
else:
x = 1
for i in range(n):
x = x * n
return x * f3(n - 1)
def f4(n):
if n < 1:
return 1
else:
x = 1
for i in range(n * n):
x = x * 2;
return x * f4(n / 2)
Solución.
def f1(n):
if n < 1:
return 1
else:
return f1(n - 3) * f1(n - 3);
Si denominamos T(n) al número de operaciones producto que se realizan en
una llamada a la función f1(n), podemos ver que en el caso base (n = 0) no se
realiza ninguna y en cualquier otro caso se realiza una (marcada en rojo) mas las
que hagan las dos llamadas recursivas f1(n-3), Por lo tanto, la relación de
recurrencia será
def f3(n):
if n < 1:
return 1
else:
x = 1
for i in range(n):
x = x * n
return x * f3(n - 1)
def f2(n):
if n < 1:
return 1
else:
return f2(n / 2) * f2(n / 2)*f2(n / 2)
T(n) Î Q(nk·lg n) si a = bk
def f4(n):
if n < 1:
return 1
else:
x = 1
for i in range(n * n):
x = x * 2;
return x * f4(n / 2)
Introducción teórica
Se nos pide que hallemos la ecuación de recurrencia , que pueden ser la siguiente,
siguiendo los dos bucles
Siguiendo esta ecuación de recurrencia observamos que estamos ante una recursión por
división
.
Veremos las siguientes variables:
4.- Hallar formalmente el coste de los siguientes algoritmos siendo h(n,r,k) ∈ O(n)
Como es habitual en estos tipos de ejercicios las variables que tenemos son:
Función dos: Como previamente hemos dicho será también una recursión con
reducción por división, con estos datos:
5.- ¿En qué orden está el tiempo de ejecución del siguiente algoritmo? Justifica tu
respuesta
Tendremos que a=2 >1 , por tanto, aplicando la tercera fórmula, el coste del algoritmo es