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.

O(O(

))

Enunciado: Pregunta 2.c - Análisis de complejidad · Prácticas de programación UOC Juny 2020

Solución

Según los criterios oficiales de corrección

Orden de complejidad asintótica O(...) respecto a x

Solución: xx / nn

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 xx disminuye en 1 unidad hasta alcanzar el caso trivial x=0x = 0. El caso base consiste en una comparación y una asignación, lo que supone un coste constante k1k_1. El caso recursivo ejecuta una llamada recursiva sobre x−1x - 1 junto a operaciones elementales de tiempo acotado (condicional, indexación y asignación), agrupadas en una constante k2k_2. La ecuación de recurrencia que define el tiempo de ejecución T(x)T(x) es: T(x)={k1si x=0T(x−1)+k2si x>0T(x) = \begin{cases} k_1 & \text{si } x = 0 \\ T(x - 1) + k_2 & \text{si } x > 0 \end{cases} Aplicando sustituciones sucesivas: T(x)=T(x−1)+k2=T(x−2)+2k2=T(x−3)+3k2=…=T(x−i)+i⋅k2\begin{aligned} T(x) &= T(x - 1) + k_2 \\ &= T(x - 2) + 2k_2 \\ &= T(x - 3) + 3k_2 \\ &= \dots \\ &= T(x - i) + i \cdot k_2 \end{aligned} El proceso finaliza cuando se alcanza la condición de parada x−i=0x - i = 0, es decir, cuando i=xi = x: T(x)=T(0)+x⋅k2=k1+k2⋅xT(x) = T(0) + x \cdot k_2 = k_1 + k_2 \cdot x Por tanto, el algoritmo presenta una complejidad asintótica lineal O(x)O(x) 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.

‹ Pregunta 2.c · Juny 2020

Más ejercicios de Análisis de complejidad y eficiencia