Pregunta 2.d y 2.e · Prácticas de programación UOC 2021

Tema: Análisis de complejidad y eficiencia · Del examen Examen de síntesis de Prácticas de programación (Convocatoria de enero 2021) (2021)

Enunciado

Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:

int guess(int x)

{

int result;

assert(x >= 0);

if (x == 0) // (1)

result = 1; // (2)

else // (3)

result = guess(x - 1) * x; // (4)

return result; // (5)

}

d)

[15%] Efectúa el estudio formal del coste computacional (complejidad temporal) correspondiente al diseño recursivo original a través de su relación de recurrencia detallada paso a paso.

e)

[5%] En caso de que se concibiera una variante de este método cuyo orden de complejidad temporal resultase de clase logarítmica O(log⁡n)O(\log n), razona en un párrafo breve de 4 a 5 líneas la conveniencia o inconveniencia de sustituir la implementación actual por dicha propuesta.

Enunciado: Pregunta 2.d y 2.e · Prácticas de programación UOC 2021

Solución

Según los criterios oficiales de corrección

d) Orden de complejidad asintótica obtenido

Solución: O(x)O(x) / O(n)O(n) / Lineal

d) [15%] Efectúa el estudio formal del coste computacional (complejidad temporal) correspondiente al diseño recursivo original a través de su relación de recurrencia detallada paso a paso.

Solución: Relación de recurrencia: {T(0)=k0T(x)=T(x−1)+k1,si x>0\begin{cases} T(0) = k_0 \\ T(x) = T(x-1) + k_1, & \text{si } x > 0 \end{cases} Desarrollo por sustitución regresiva: T(x)=T(x−1)+k1=T(x−2)+2k1=⋯=T(x−i)+i⋅k1T(x) = T(x-1) + k_1 = T(x-2) + 2k_1 = \dots = T(x-i) + i \cdot k_1 Para el caso base x−i=0  ⟹  i=xx - i = 0 \implies i = x: T(x)=T(0)+x⋅k1=k0+x⋅k1∈O(x)T(x) = T(0) + x \cdot k_1 = k_0 + x \cdot k_1 \in O(x)

e) Decisión respecto a una alternativa logarítmica

Solución: Inconveniente

e) [5%] En caso de que se concibiera una variante de este método cuyo orden de complejidad temporal resultase de clase logarítmica O(log n), razona en un párrafo breve de 4 a 5 líneas la conveniencia o inconveniencia de sustituir la implementación actual por dicha propuesta.

Solución: Resultaría inconveniente porque el tipo `int` desborda a partir de x≥13x \ge 13 (13!>231−113! > 2^{31}-1). Al estar acotado a un máximo de 12 iteraciones, el coste es despreciable y una alternativa logarítmica solo añadiría sobrecarga de control y constantes ocultas.

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 · 2023 · Pregunta 2.d y 2.e · 2021 ›

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