Está en la página 1de 4

Diseño de Algoritmos

Facultad de Ciencias Matemáticas


Curso 2021-2022

Examen Parcial (Segundo Ejercicio)

Diseño y Análisis de Algoritmos Recursivos

Se pide elegir y resolver un solo ejercicio de entre los siguientes tres ejercicios propuestos:

Ejercicio 1 Un vector de números naturales con un número impar de elementos mayor o igual que 3 se
dice que es una montaña si al recorrer sus elementos de izquierda a derecha primero crecen estrictamen-
te hasta llegar a la mitad y después decrecen estrictamente. Por ejemplo, para el vector de 7 elementos
[3, 5, 15, 28, 20, 11, 9] es una montaña, pero el vector de 5 elementos [1, 24, 38, 28, 30] no lo es.

(a) Especificar una función que reciba como argumento un vector V [1..N ] de números naturales y devuelva
un booleano que indique si el contenido de V es o no una montaña.
(b) Diseña un algoritmo recursivo de coste lineal en N que implemente la función recursiva especificada en el
apartado (a). Analiza la complejidad del algoritmo diseñado planteando la correspondiente recurrencia.
(c) Transformar a iterativo la función recursiva obtenida en el apartado (b). Simplificar el algoritmo elimi-
nando asignaciones y variables innecesarias para obtener la versión iterativa del algoritmo original del
apartado (a).

Ejercicio 2 La expansión en serie de la función arcotangente, arctan(x), viene dada por

x3 x5 x7 x9 x11
arctan(x) = x − 3 + 5 − 7 + 9 − 11 + ···

(a) Especificar una función que reciba como argumento un valor x de tipo real y un número n ≥ 1 de tipo
natural, y calcule la suma de los n primeros términos de la serie. Por ejemplo, para x = 1,2 y n = 3,
3 5
calcuları́a la suma de los tres primeros términos: 1,2 − (1,2)
3 + (1,2)
5 = 1,121664.
(b) Diseña un algoritmo recursivo de coste lineal en n que implemente la función recursiva especificada en el
apartado (a). Analiza la complejidad del algoritmo diseñado planteando la correspondiente recurrencia.
(c) Transformar a iterativo la función recursiva obtenida en el apartado (b). Simplificar el algoritmo elimi-
nando asignaciones y variables innecesarias para obtener la versión iterativa del algoritmo original del
apartado (a).

Ejercicio 3 Dado un vector V [0..N ) de números enteros, queremos saber si existe una componente cuyo
valor sea la suma de todas las componentes posteriores en el vector. Por ejemplo, para el vector de elementos
[2, 3, 1, 2], su segunda componente cumple esta propiedad.

(a) Especificar una función que reciba como argumento un vector V [0..N ) de números enteros y devuelva
un booleano que indique si se cumple o no esta propiedad.
(b) Diseña un algoritmo recursivo de coste lineal en N que implemente la función recursiva especificada en el
apartado (a). Analiza la complejidad del algoritmo diseñado planteando la correspondiente recurrencia.
(c) Transformar a iterativo la función recursiva obtenida en el apartado (b). Simplificar el algoritmo elimi-
nando asignaciones y variables innecesarias para obtener la versión iterativa del algoritmo original del
apartado (a).

También podría gustarte