Pregunta 2.d · Prácticas de programación UOC 2023

Tema: Análisis de complejidad y eficiencia · Del examen Examen de síntesis. Prácticas de programación (Enero 2023) (2023)

Enunciado

Pregunta 2 (50%). Análisis y desarrollo de método recursivo e iterativo

Se facilita el código siguiente escrito en lenguaje C correspondiente a una función denominada mystery. Cabe recordar que el operador de división / aplicado entre cantidades enteras calcula la división truncada (cociente entero):

void mystery (int x)

{

int res;

assert(x >= 0); // (1)

if (x >= 2) // (2)

res = 1 + mystery(x / 2); // (3)

else // (4)

res = 1; // (5)

return res; // (6)

} Nota: Aunque la firma original indica void, la rutina incluye sentencias return res; devolviendo un entero.

d)

[15%] Evalúa el coste temporal en el peor caso del procedimiento original recursivo, justificando con rigor analítico la formulación matemática de la recurrencia y su deducción.

Enunciado: Pregunta 2.d · Prácticas de programación UOC 2023

Solución

Según los criterios oficiales de corrección

d. [15%] Evalúa el coste temporal en el peor caso del procedimiento original recursivo, justificando con rigor analítico la formulación matemática de la recurrencia y su deducción.

Solución: En cada nivel de la recursión se verifica una condición booleana simple y se realizan operaciones aritméticas básicas de tiempo constante (O(1)O(1)), acompañadas de una llamada interna con el tamaño del problema reducido a la mitad (x/2x/2). La recurrencia asociada a la función temporal T(x)T(x) queda delimitada formalmente como: T(x)={k1si x<2k2+T(⌊x2⌋)si x≥2T(x) = \begin{cases} k_1 & \text{si } x < 2 \\ k_2 + T\left(\left\lfloor\frac{x}{2}\right\rfloor\right) & \text{si } x \ge 2 \end{cases} Desplegando la recurrencia mediante sustitución progresiva durante ii etapas: T(x)=k2+T(x2)T(x) = k_2 + T\left(\frac{x}{2}\right) =k2+(k2+T(x4))=2k2+T(x22)= k_2 + \left(k_2 + T\left(\frac{x}{4}\right)\right) = 2k_2 + T\left(\frac{x}{2^2}\right) =3k2+T(x23)= 3k_2 + T\left(\frac{x}{2^3}\right) =…= \dots =i⋅k2+T(x2i)= i \cdot k_2 + T\left(\frac{x}{2^i}\right) El caso base se alcanza cuando el argumento se reduce a la unidad o inferior, es decir: x2i=1  ⟹  2i=x  ⟹  i=log⁡2(x)\frac{x}{2^i} = 1 \implies 2^i = x \implies i = \log_2(x) Reemplazando el valor de ii en la ecuación general obtenida: T(x)=k2log⁡2(x)+T(1)=k2log⁡2(x)+k1T(x) = k_2 \log_2(x) + T(1) = k_2 \log_2(x) + k_1 Se concluye, por consiguiente, que el algoritmo presenta una complejidad asintótica de orden logarítmico: O(log⁡x)O(\log x).

Orden de complejidad asintótica final:

Solución: O(log⁡x)O(\log x) / O(log⁡2x)O(\log_2 x)

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.d - Análisis de complejidad y eficienc… · 2023 ›

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