Está en la página 1de 2

ADDA 1ª Convocatoria - Junio Curso 2015/2016

Ejercicio 2: Análisis y complejidad


Dada la siguiente función:

int f (int a, int b) {


int r;
if (b<=a){
r = 0;
} else {
for (int i = a + 1; i <= b; i++) {
for (int j = 1; j <= i; j++) {
r = r + 5;
}
}
r = r + f(a, b-1);
}
}

La llamada inicial sería f(0,b), donde b es un elemento de tipo entero cuyo valor es
mayor que 0.

SE PIDE:
a) Indique justificadamente el tamaño del problema de la función f. Indique también
cuál sería el tamaño del problema para la llamada inicial.
b) Determine razonadamente los casos mejor y peor de la función f.
c) Calcule razonadamente el T(n) y la complejidad considerando los casos mejor y
peor de la función f.
ADDA 1ª Convocatoria - Junio Curso 2015/2016

Solución

a)
El tamaño del problema vendrá definido por n = b-a.
Para la llamada inicial sería b.
b) No hay caso mejor ni caso peor ya que todos los casos dependen del tamaño del
problema.

c) Complejidad
Teniendo en cuenta que n = b – a, la recurrencia queda de la siguiente forma:

𝑇(𝑛) = 𝑇(𝑛 − 1) + ∑𝑛𝑖=1 ∑𝑖𝑗=1 𝑘0 ≅ 𝑇(𝑛 − 1) + 𝑘0 ∑𝑛𝑖=1 𝑖


𝐾0
𝑇(𝑛) ≅ 𝑇(𝑛 − 1) + 𝑛2 ≅ 𝑇(𝑛 − 1) + 𝜃(𝑛2 )
2

a = 1, b = 1, d = 2, c = 1

𝑇(𝑛) ∈ 𝜃(𝑛3 )

También podría gustarte