Pregunta 2.d-e · Prácticas de programación UOC 2021
Tema: Análisis de complejidad y eficiencia · Del examen Prueba de síntesis. Enero de 2021 (2021)
Enunciado
Se facilita la siguiente rutina recursiva escrita en lenguaje C:
#define MAX 42
int guess(int v[MAX], int a, int b)
{
int result;
assert(0 <= a && a < MAX && 0 <= b && b < MAX && a <= b);
if (a == b) // (1)
result = v[b]; // (2)
else { // (3)
result = guess(v, a + 1, b); // (4)
if (result > v[a]) // (5)
result = v[a]; // (6)
} // (7)
return result; // (8)
}
d.
[15%] Formula y resuelve de manera exhaustiva la ecuación en recurrencia que modela la complejidad temporal de la implementación recursiva original (peor caso).
e.
[5%] Si se planteara una solución alternativa cuya complejidad algorítmica fuera igualmente de orden lineal, ¿existiría algún criterio teórico relevante de complejidad para decantarse por ella? Razona la contestación en cuatro o cinco líneas.

Solución
Según los criterios oficiales de corrección
d. [15%] Orden de complejidad asintótica obtenido
Solución:
d. [15%] Formula y resuelve de manera exhaustiva la ecuación en recurrencia que modela la complejidad temporal de la implementación recursiva original (peor caso)
Solución: Cálculo analítico de la complejidad: Definimos el tamaño del problema como el número de elementos restantes entre los dos extremos, es decir, . - Caso base (, es decir, ): Se realiza una comprobación condicional, un acceso a posición de array y una asignación. Todas son instrucciones elementales que englobamos en una constante de tiempo . - Paso recursivo (): En el peor caso (cuando se efectúa la actualización del mínimo), se evalúan las dos estructuras de control if, los accesos indexados al vector, la operación de suma en la llamada y la reasignación de variable, sumando un coste constante más el tiempo de la llamada interna con tamaño reducido en 1 (). El sistema en recurrencia queda configurado por: Desarrollo mediante el método de expansión o sustituciones sucesivas: Para alcanzar la base recursiva exigimos . Sustituyendo el índice: Por consiguiente, la complejidad temporal es de orden lineal, esto es, .
e. [5%] Si se planteara una solución alternativa cuya complejidad algorítmica fuera igualmente de orden lineal, ¿existiría algún criterio teórico relevante de complejidad para decantarse por ella? Razona la contestación en cuatro o cinco líneas.
Solución: Desde una perspectiva estrictamente asintótica, ambas alternativas poseen una cota superior idéntica: pertenecen a la clase (o ). Por tanto, la tasa de incremento del tiempo de ejecución respecto al tamaño de los datos crecerá al mismo ritmo en los dos casos. Para elegir entre una u otra convendría analizar aspectos ajenos a la complejidad teórica, tales como el consumo de memoria en la pila (overhead de llamadas), la legibilidad o factores de constante multiplicativa oculta.
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 y 2.e · 2021 · Pregunta 2.c · Juny 2020 ›