1. Universidad Andr´es Bello
Facultad de Ingenier´ıa
Ingenier´ıa en Computaci´on e Inform´atica
Dise˜no de Algoritmos
Ejercicios Resueltos - An´alisis
Prof. C´atedra: Carlos Contreras Bolton Fecha: 25 de Marzo de 2014
Profs. Laboratorio: Daniela Ubilla – Felipe Reyes
Ejercicio 1: Sumatoria
n
i=1
i = 1 + 2 + 3 + ... + (n − 1) + n (1)
Si invertimos la suma tenemos:
n
i=1
i = n + (n − 1) + ... + 3 + 2 + (2)
Si sumamos componente a componente (1) y (2) tenemos:
2
n
i=1
i = (1 + n) + (2 + (n − 1)) + (3 + (n − 2)) + ... + ((n − 1) + 2) + (n + 1) (3)
Que es lo mismo que:
2
n
i=1
i = (n + 1) + (n + 1) + (n + 1) + ... + (n + 1) + (n + 1) (4)
La parte derecha est´a compuesta por n sumas de n + 1:
2
n
i=1
i = n(n + 1) (5)
Finalmente:
n
i=1
i =
n(n + 1)
2
2. Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
Ejercicio 2: Resolver
Resolver:
T(n) = T(
√
n) + c; T(1) = d; T(2) = d;
Expandimos:
T(n) = T(
√
n) + c
= T(n
1
2 ) + c
= T n
1
22
+ c + c
= T n
1
22
+ 2c
= T n
1
23
+ c + 2c
= T n
1
23
+ 3c
...
= T n
1
2k
+ kc
Expandimos hasta T(2), entonces:
n
1
2k
= 2
2k√
n = 2
n = 22k
2k
= log2 n
k = log2 log2 n
Continuamos:
= T n
1
2k
+ kc
= T(2) + kc
= d + c log2 log2 n
= O(log2 log2 n)
Carlos Contreras Bolton
2
3. Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
Ejercicio 3: Resolver
T(n) = 3
n
2
+ n2
− n; T(1) = 1 (1)
Expandimos:
T(n) = 3T(
n
2
) + n2
− n
= 3 3T
n
4
+
n
2
2
−
n
2
+ n2
− n = 9T
n
4
+ 3
n2
4
−
n
2
+ n2
− n
= 27T
n
8
+ 9
n2
16
−
n
4
+ 3
n2
4
−
n
2
+ n2
− n
...
= 3i
T
n
2i
+ n2
i−1
j=0
(
3
4
)j
+ n
i−1
j=0
(
3
2
)j
= 3i
T
n
2i
− 4n2 3
4
i
+ 4n2
− 2n
2
3
i
+ 2n por
n
i=0
ai
=
an+1
− 1
a − 1
...
= 3log n
T
n
2log n
− 4n2 3
4
log n
+ 4n2
− 2n
2
3
log n
+ 2n
= nlog 3
T(1) − 4nlog 3
+ 4n2
− 2nlog 3
+ 2n
= 4n2
− 5nlog 3
+ 2n
= O(n2
)
Carlos Contreras Bolton
3
4. Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
Ejercicio 4: Resolver
Usando el m´etodo de la sustituci´on:
T(n) = 2T n
2 + bn log n
Adivinamos que O(n log n).
Probar T(n) ≤ cn log n por inducci´on.
T(n) = 2T(
n
2
) + bn log n
= 2 c
n
2
log
n
2
+ bn log n
= cn(log n − log 2) + bn log n
= cn log n − cn + bn log n
= cn log n − (cn − bn log n)
No se cumple, puesto que no podemos hacer que esta ´ultima l´ınea sea menor que cn log n
Entonces, adivinamos que O(n log2
n).
Probar T(n) ≤ cn log2
n por inducci´on.
T(n) = 2T(
n
2
) + bn log n
= 2 c
n
2
log2 n
2
+ bn log n
= cn(log n − log 2)2
+ bn log n
= cn log2
n − 2cn log n + cn + bn log n
= cn log2
n − (2cn log n − cn − bn log n)
Si c > b. Por lo tanto, T(n) = n log2
n.
Carlos Contreras Bolton
4
5. Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
Ejercicio 5: Resolver
T(n) = 1
n
n−1
i=0 T(i) + cn, con T(0)=0.
T(n) =
1
n
n−1
i=0
T(i) + cn (1)
Multiplicar por n en (1):
nT(n) =
n−1
i=0
T(i) + cn2
(2)
Desplazando (2) en n − 1:
(n − 1)T(n − 1) =
n−2
i=0
T(i) + c(n − 1)2
(3)
Restando (2)-(3):
nT(n) − (n − 1)T(n − 1) = (
n−1
i=0
T(i) −
n−2
i=0
T(i)) + (cn2
− c(n − 1)2
) (4)
nT(n)−(n−1)T(n−1) = ((T(0)+...+T(n−2)+T(n−1))−(T(0)+...+T(n−2)))+(cn2
−c(n2
−2n+1)) (5)
nT(n) − (n − 1)T(n − 1) = T(n − 1) + 2cn − c (6)
nT(n) = nT(n − 1) + 2cn − c (7)
Dividiendo (7) por n:
T(n) = T(n − 1) +
2cn − c
n
(8)
Expandiendo:
T(n) =
2cn − c
n
+ T(n − 1)
=
2cn − c
n
+
2c(n − 1) − c
n − 1
+ T(n − 2)
=
2cn − c
n
+
2c(n − 1) − c
n − 1
+
2c(n − 2) − c
n − 2
+ T(n − 3)
=
2cn − c
n
+
2c(n − 1) − c
n − 1
+
2c(n − 2) − c
n − 2
+ ... +
2c(1) − c
1
+ T(0)
=
2cn
n
+
2c(n − 1)
n − 1
+
2c(n − 2)
n − 2
+ ... +
2c(1)
1
−
c
n
+
c
n − 1
+
c
n − 2
+ ... +
c
1
= (2c + 2c + 2c + ... + 2c) − c
n
i=1
1
i
= 2cn − c
n
i=1
1
i
= 2cn − cHn
< 2cn
Por lo tanto, T(n) = O(n).
Carlos Contreras Bolton
5
6. Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
Ejercicio 6: Resolver
T(n) = n − 1 +
2
n
n−1
i=1
T(i), n ≥ 2. T(1) = 0 (1)
Re-escribir la recurrencia para n + 1:
T(n + 1) = (n + 1) − 1 +
2
n + 1
n
i=1
T(i) (2)
Multiplicar (1) por n y (2) por n + 1:
nT(n) = n(n − 1) + 2
n−1
i=1
T(i) (3)
(n + 1)T(n + 1) = (n + 1)n + 2
n
i=1
T(i) (4)
Restar (4)-(3):
(n + 1)T(n + 1) − nT(n) = (n + 1)n − n(n − 1) + 2(
n
i=1
T(i) −
n−1
i=1
T(i)) (5)
(n+1)T(n+1)−nT(n) = 2n+2((T(0)+T(1)+...+T(n−1)+T(n))−(T(0)+T(1)+...+T(n−1))) (6)
(n + 1)T(n + 1) − nT(n) = 2n + 2T(n) (7)
T(n + 1) =
n + 2
n + 1
T(n) +
2n
n + 1
(n ≥ 2) (8)
Podemos simplificar 2n/(n + 1) como cota inferior 2.
T(n + 1) ≤
n + 2
n + 1
T(n) + 2 (9)
T(n) ≤
n + 1
n
T(n − 1) + 2 (10)
Expandiendo (10):
T(n) ≤ 2 +
n + 1
n
T(n − 1)
= 2 +
n + 1
n
2 +
n
n − 1
T(n − 2)
= 2 +
n + 1
n
2 +
n
n − 1
2 +
n − 1
n − 2
T(n − 3)
= 2 +
n + 1
n
2 +
n
n − 1
2 +
n − 1
n − 2
2 +
n − 2
n − 3
T(n − 4)
¿Hasta d´onde llega la expansi´on? hasta llegar a T(3) ≤ 4
3 T(2)+2 = 2+ 4
3 (3
2 T(1)+2), como T(1) = 0,
entonces T(3) ≤ 2 + 4
3 (2) (este es el motivo del 4/3 visto en el ejercicio en clases).
Continuando con la expansi´on:
Carlos Contreras Bolton
6
7. Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
T(n) ≤ 2 +
n + 1
n
2 +
n
n − 1
2 +
n − 1
n − 2
2 +
n − 2
n − 3
..,2 +
4
3
(2)
= 2 1 +
n + 1
n
+
n + 1
n
n
n − 1
+
n + 1
n
n
n − 1
n − 1
n − 2
+ ... +
n + 1
n
n
n − 1
n − 1
n − 2
...
4
3
= 2 1 +
n + 1
n
+
n + 1
n − 1
+
n + 1
n − 2
+ ... +
n + 1
3
= 2(n + 1)
1
n + 1
+
1
n
+
1
n − 1
+ ... +
1
3
= 2(n + 1)
1
n + 1
+
1
n
+
1
n − 1
+ ... +
1
3
+
1
2
+ 1 −
1
2
+ 1
= 2(n + 1)(H(n + 1) − 1, 5)
Recuerden que H(n) = 1+1/2+1/3+...+1/n es la serie harm´onica, la cual tiene una aproximaci´on
a H(n) = ln n + γ + O(1/n), donde γ = 0, 577.. es la constante de Euler. Entonces la soluci´on a T(n) es:
T(n) ≤ 2(n + 1)(ln n + γ − 1, 5) + O(1) = O(n log n)
Carlos Contreras Bolton
7
8. Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
Ejercicio 7: Resolver
T(n) =
a if n = 1;
2T(n/4) + log n if n > 1.
T(n) = 2T
n
4
+ log n
= 2 2T
n
42
+ log
n
4
+ log n = 22
T
n
42
+ 2 log
n
4
+ log n
= 2 2 2T
n
43
+ log
n
42
+ log
n
4
+ log n = 23
T
n
43
+ 22
log
n
42
+ 2 log
n
4
+ log n
= ...
= 2i
T
n
4i
+
i−1
k=0
log
n
4k
= 2i
T
n
4i
+ log n
i−1
k=0
2k
−
i−1
k=0
2k
log 4k
Considerando n como potencia de 4 y todos los logaritmos en base 4 (la base no importa tanto, lo
importante es que es logaritmo) tenemos:
T(n) = 2i
T
n
4i
+ log4 n
i−1
k=0
2k
−
i−1
k=0
2k
log4 4k
= ...
= 2i
T (1) + log4 n
i−1
k=0
2k
−
i−1
k=0
2k
k
= a2i
+ log4 n(2i
− 1) − (i − 2)2i
− 2
Considerando que n es potencia de 4, entonces n = 4i
e i = log4 n. Tambi´en podemos obtener que√
n = 2i
.
T(n) = a2i
+ log4 n(2i
− 1) − (i − 2)2i
− 2
= a
√
n + log4 n(
√
n − 1) − (log4 n − 2)
√
n − 2
= (a + 2)
√
n − log4 n − 2
Por lo tanto T(n) = Θ(
√
n).
Carlos Contreras Bolton
8