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
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
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
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
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
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
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
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
Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
Ejercicio 8: Resolver
T(n) =
1 n = 1
n−1
i=1 T(i) + n2
n ≥ 2
Si restamos T(n − 1) a T(n) tenemos:
T(n) − T(n − 1) =
n−1
i=1
T(i) + n2
−
n−2
i=1
T(i) + (n − 1)2
=
n−2
i=1
T(i) + T(n − 1) + n2
−
n−2
i=1
T(i) + n2
− 2n + 1
= T(n − 1) + 2n − 1
Si despejamos tenemos:
T(n) = 2T(n − 1) + 2n − 1
Expandiendo la recurrencia:
T(n) = 2T(n − 1) + 2n − 1
= 2(2T(n − 2) + 2(n − 1) − 1) + 2n − 1
= 22
T(n − 2) + 22
(n − 1) − 2 + 2n − 1
= 22
(2T(n − 3) + 2(n − 2) − 1) + 22
(n − 1) − 2 + 2n − 1
= 23
T(n − 3) + 23
(n − 2) − 22
+ 22
(n − 1) − 2 + 2n − 1
= 23
T(n − 3) + (23
(n − 2) + 22
(n − 1) + 2n) − (22
+ 2 + 1)
= 23
T(n − 3) + (23
(n − 2) + 22
(n − 1) + 21
(n − 0)) − (22
+ 21
+ 20
)
...
= 2i
T(n − i) +
i−1
j=0
2j+1
(n − j) −
i−1
j=0
2j
= 2i
T(n − i) + n
i−1
j=0
2j+1
−
i−1
j=0
j2j+1
−
i−1
j=0
2j
= 2i
T(n − i) + 2n
i−1
j=0
2j
− 2
i−1
j=0
j2j
−
i−1
j=0
2j
...
= 2i
T(n − i) + (2n − 1)
i−1
j=0
2j
− 2
i−1
j=0
j2j
Al caso base se llega cuando n − i = 1, entonces i = n − 1:
T(n) = 2n−1
T(1) + (2n − 1)
n−2
j=0
2j
− 2
n−2
j=0
j2j
Considerando que:
Carlos Contreras Bolton
9
Dise˜no de Algoritmos Ejercicios Resueltos - An´alisis
n−2
j=0
2j
= 2n−1
− 1
n−2
j=0
j2j
= (n − 3)2n−1
+ 2
Reemplazando en la recurrencia:
T(n) = 2n−1
+ (2n − 1)(2n−1
− 1) − 2((n − 3)2n−1
+ 2)
= (1 + 2n − 1 − 2n + 6)2n−1
− 2n + 1 − 4
= 6 · 2n−1
− 2n − 3
= 3 · 2n
− 2n − 3
∈ Θ(2n
)
Carlos Contreras Bolton
10

ejercicios resueltos análisis de algoritmos

  • 1.
    Universidad Andr´es Bello Facultadde 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 AlgoritmosEjercicios 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 AlgoritmosEjercicios 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 AlgoritmosEjercicios 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 AlgoritmosEjercicios 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 AlgoritmosEjercicios 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 AlgoritmosEjercicios 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 AlgoritmosEjercicios 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
  • 9.
    Dise˜no de AlgoritmosEjercicios Resueltos - An´alisis Ejercicio 8: Resolver T(n) = 1 n = 1 n−1 i=1 T(i) + n2 n ≥ 2 Si restamos T(n − 1) a T(n) tenemos: T(n) − T(n − 1) = n−1 i=1 T(i) + n2 − n−2 i=1 T(i) + (n − 1)2 = n−2 i=1 T(i) + T(n − 1) + n2 − n−2 i=1 T(i) + n2 − 2n + 1 = T(n − 1) + 2n − 1 Si despejamos tenemos: T(n) = 2T(n − 1) + 2n − 1 Expandiendo la recurrencia: T(n) = 2T(n − 1) + 2n − 1 = 2(2T(n − 2) + 2(n − 1) − 1) + 2n − 1 = 22 T(n − 2) + 22 (n − 1) − 2 + 2n − 1 = 22 (2T(n − 3) + 2(n − 2) − 1) + 22 (n − 1) − 2 + 2n − 1 = 23 T(n − 3) + 23 (n − 2) − 22 + 22 (n − 1) − 2 + 2n − 1 = 23 T(n − 3) + (23 (n − 2) + 22 (n − 1) + 2n) − (22 + 2 + 1) = 23 T(n − 3) + (23 (n − 2) + 22 (n − 1) + 21 (n − 0)) − (22 + 21 + 20 ) ... = 2i T(n − i) + i−1 j=0 2j+1 (n − j) − i−1 j=0 2j = 2i T(n − i) + n i−1 j=0 2j+1 − i−1 j=0 j2j+1 − i−1 j=0 2j = 2i T(n − i) + 2n i−1 j=0 2j − 2 i−1 j=0 j2j − i−1 j=0 2j ... = 2i T(n − i) + (2n − 1) i−1 j=0 2j − 2 i−1 j=0 j2j Al caso base se llega cuando n − i = 1, entonces i = n − 1: T(n) = 2n−1 T(1) + (2n − 1) n−2 j=0 2j − 2 n−2 j=0 j2j Considerando que: Carlos Contreras Bolton 9
  • 10.
    Dise˜no de AlgoritmosEjercicios Resueltos - An´alisis n−2 j=0 2j = 2n−1 − 1 n−2 j=0 j2j = (n − 3)2n−1 + 2 Reemplazando en la recurrencia: T(n) = 2n−1 + (2n − 1)(2n−1 − 1) − 2((n − 3)2n−1 + 2) = (1 + 2n − 1 − 2n + 6)2n−1 − 2n + 1 − 4 = 6 · 2n−1 − 2n − 3 = 3 · 2n − 2n − 3 ∈ Θ(2n ) Carlos Contreras Bolton 10