Pregunta 2.c - Análisis de complejidad · Prácticas de programación UOC Juny 2020
Tema: Análisis de complejidad y eficiencia · Del examen Juny (2020)
Enunciado
Pregunta 2 [60%]. Análisis y transformación de algoritmo recursivo
A partir del siguiente algoritmo recursivo implementado en C:
#define MAX 64
int guess (int v[MAX], int x)
{
int res;
assert (0 <= x && x <= MAX);
if (x == 0) // (1)
res = 0; // (2)
else // (3)
{
res = guess(v, x-1); // (5)
if (v[x-1] == (x-1)) // (6)
res = res + 1; // (7)
}
return res;
}
c. [30%] Determina la complejidad temporal teórica de la versión recursiva original mediante la formulación y resolución de la relación de recurrencia correspondiente.

Solución
Según los criterios oficiales de corrección
Orden de complejidad asintótica O(...) respecto a x
Solución: /
c. [30%] Determina la complejidad temporal teórica de la versión recursiva original mediante la formulación y resolución de la relación de recurrencia correspondiente.
Solución: En cada nivel de recursión, el parámetro disminuye en 1 unidad hasta alcanzar el caso trivial . El caso base consiste en una comparación y una asignación, lo que supone un coste constante . El caso recursivo ejecuta una llamada recursiva sobre junto a operaciones elementales de tiempo acotado (condicional, indexación y asignación), agrupadas en una constante . La ecuación de recurrencia que define el tiempo de ejecución es: Aplicando sustituciones sucesivas: El proceso finaliza cuando se alcanza la condición de parada , es decir, cuando : Por tanto, el algoritmo presenta una complejidad asintótica lineal respecto al parámetro de entrada.
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.