¿Cuál es la complejidad de [matemáticas] T (n) = 2T (n-1) + C? [/ Matemáticas]

Por ahora, este debe ser el hábito de un (oh, bueno) viejo programador al que le gusta resolver problemas de la manera más general y abstracta posible para escribir la cantidad mínima de código que resuelve el número máximo de problemas.

Lo que veo aquí es:

[matemáticas] t_ {n + 1} = p \ cdot t_n + q \ tag {1} [/ matemáticas]

donde [matemática] p [/ matemática] y [matemática] q [/ matemática] son ​​números reales constantes ([matemática] C \ equiv q [/ matemática]) y acabamos de cambiar la relación de “actual dada anterior” a “siguiente corriente dada “:

[matemáticas] p, \; q \ in \ mathbb {R} \ tag {2} [/ math]

[matemáticas] n \ geqslant 0 \ etiqueta * {} [/ matemáticas]

[matemáticas] t_0 = 0 \ etiqueta * {} [/ matemáticas]

donde la última condición, aparentemente pedante, es importante, ver abajo.

Preguntamos si existe una función [math] f (x) [/ math] (o simplemente [math] f [/ math] para abreviar de ahora en adelante):

[matemáticas] \ displaystyle \ sum_ {n \ geqslant 0} t_nx ^ n \ tag {3} [/ matemáticas]

de donde son los números reales [math] t_n [/ math] ( 1 )?

Multiplique ambos lados de ( 1 ) por [matemática] x_n [/ matemática] “desde la derecha”:

[matemáticas] t_ {n + 1} x ^ n = p \ cdot t_n x ^ n + qx ^ n \ tag {4} [/ matemáticas]

y sume ambos lados de ( 4 ) sobre todos los valores legales de [math] n [/ math]:

[matemáticas] \ displaystyle \ sum_ {n \ geqslant 0} t_ {n + 1} x ^ n = \ sum_ {n \ geqslant 0} p \ cdot t_n x ^ n + \ sum_ {n \ geqslant 0} qx ^ n \ tag {5} [/ matemáticas]

Como [math] p [/ math] y [math] q [/ math] son ​​constantes, se pueden llevar a través del signo de suma (sin alterar el resultado)

[matemáticas] \ displaystyle \ sum_ {n \ geqslant 0} t_ {n + 1} x ^ n = p \ cdot \ sum_ {n \ geqslant 0} t_n x ^ n + q \ cdot \ sum_ {n \ geqslant 0} x ^ n \ tag {6} [/ math]

Dos objetos deberían ser inmediatamente reconocibles: nuestra f, esa es la suma en el medio, y la serie geométrica, esa es la suma más a la derecha, dado que [matemáticas] | x | <1 [/ matemáticas]:

[matemáticas] \ displaystyle \ sum_ {n \ geqslant 0} t_ {n + 1} x ^ n = pf + \ dfrac {q} {1 – x} \ tag {7} [/ matemáticas]

Observe que los coeficientes [matemática] t [/ matemática] en la suma más a la izquierda en ( 7 ) “corren delante del padre”:

[matemáticas] t_1 + t_2x + t_3x ^ 2 + t_4x ^ 3 + t_5x ^ 4 + \ ldots \ tag {8} [/ matemáticas]

¿Lo que falta? ¿Cómo podemos expresar ( 8 ) en términos de ( 3 )?

Deletrear ( 3 ):

[matemáticas] f = t_0 + t_1x + t_2x ^ 2 + t_3x ^ 3 + t_4x ^ 4 + t_5x ^ 5 + \ ldots \ tag * {} [/ matemáticas]

Resta [math] t_0 [/ math] de ambos lados:

[matemáticas] f – t_0 = t_1x + t_2x ^ 2 + t_3x ^ 3 + t_4x ^ 4 + t_5x ^ 5 + \ ldots \ tag * {} [/ matemáticas]

y factorice una copia de [math] x [/ math] de la serie del lado derecho anterior:

[matemáticas] f – t_0 = x (t_1 + t_2x + t_3x ^ 2 + t_4x ^ 3 + t_5x ^ 4 + \ ldots) \ tag * {} [/ math]

y observe que la serie ahora coincide con nuestra suma más a la izquierda en ( 8 ):

[matemáticas] \ displaystyle \ sum_ {n \ geqslant 0} t_ {n + 1} x ^ n = \ dfrac {f – t_0} {x} \ tag {9} [/ matemáticas]

Ponga ( 9 ) nuevamente en ([matemáticas] 7 [/ matemáticas]):

[matemáticas] \ dfrac {f – t_0} {x} = pf + \ dfrac {q} {1 – x} \ tag {10} [/ matemáticas]

y resuelve ( 10 ) para [matemáticas] f [/ matemáticas]:

[matemáticas] f = \ dfrac {t_0} {1 – px} + q \ dfrac {x} {(1-px) (1-x)} \ tag {11} [/ matemáticas]

Por inspección manual:

[matemáticas] \ dfrac {p} {1-px} – \ dfrac {1} {1-x} = \ dfrac {p-px-1 + px} {(1-px) (1-x)} = \ etiqueta * {} [/ math]

[matemáticas] \ dfrac {p-1} {(1-px) (1-x)} \ tag * {} [/ matemáticas]

Por lo tanto, para el segundo término en ( 11 ) tenemos:

[matemáticas] q \ dfrac {x} {(1-px) (1-x)} = \ dfrac {q} {p-1} x \ Big (\ dfrac {p} {1-px} – \ dfrac { 1} {1-x} \ Big) \ tag * {} [/ math]

y ( 11 ) se convierte en:

[matemáticas] f = \ dfrac {t_0} {1 – px} + \ dfrac {q} {p-1} x \ Big (\ dfrac {p} {1-px} – \ dfrac {1} {1-x } \ Big) \ tag * {} [/ math]

Ahora suponemos que:

[matemáticas] t_0 = 0 \ etiqueta * {} [/ matemáticas]

que lleva [math] f [/ math] a:

[matemáticas] f = \ dfrac {q} {p-1} x \ Big (\ dfrac {p} {1-px} – \ dfrac {1} {1-x} \ Big) \ tag {12} [/ matemáticas]

Para unir ( 12 ) en la forma de ( 2 ) simplemente sustituimos la serie por cada término:

[matemáticas] \ displaystyle f = \ dfrac {q} {p-1} \ Big (\ sum_ {n \ geqslant 0} p ^ {n + 1} x ^ {n + 1} – \ sum_ {n \ geqslant 0 } x ^ {n + 1} \ Big) \ tag * {} [/ math]

Dado que el factor frente a las sumas es una constante y ambas sumas se ejecutan en el mismo rango de la variable de suma, tenemos para [math] t_n [/ math]:

[matemáticas] \ displaystyle f = \ sum_ {n \ geqslant 0} \ dfrac {q} {p-1} (p ^ {n + 1} – 1) x ^ {n + 1} \ tag * {} [/ matemáticas]

o:

[matemáticas] t_n = \ dfrac {q} {p-1} (p ^ n – 1) \ tag {13} [/ matemáticas]

la respuesta, suponiendo que [math] t_0 \ equiv 0 [/ math].

En su caso solo ponga [math] p = 2 [/ math]:

[matemáticas] t_n = \ dfrac {q} {2-1} (2 ^ n – 1) = C (2 ^ n – 1) \ tag {14} [/ matemáticas]

Árbol de recursión:


[matemáticas] \ small {Suponiendo \ T (1) = C} [/ matemáticas],

[matemáticas] T (n) = {C + 2 * C + 4 * C + \ dots + 2 ^ {n-1} * C} = {\ color {Red} {C * (2 ^ n-1)} }[/matemáticas]

Exponencial [math] \ Rightarrow [/ math] ¡ DEMASIADO MALO !

Llevémoslo a una forma cerrada.
Ahora T (n + 1) = 2T (n) + C
T (n + 2) = 2T (n + 1) + C = 2T (n) + 3C
T (n + 3) = 2T (n + 2) + C = 4T (n) + 7C

[matemáticas] T (n + k) = 2 ^ {k-1} T (n) + 2 ^ kC-C [/ matemáticas]
Sustituya n por 0 para obtener T (k):
[matemáticas] T (k) = 2 ^ {k-1} T (0) + 2 ^ kC-C [/ matemáticas]
Supongamos que T (0) = 1 (pero cualquier constante funciona)
El término dominante en la expresión de T (k) es [matemática] C \ cdot2 ^ k [/ matemática], que lo trae a la clase de exponenciales, es decir, complejidad exponencial.

Para el caso general no comprobado T (n + k) puede aplicar una inducción (y en realidad obtener esa fórmula general que he hecho a través de alguna coincidencia de patrones y, bueno, experiencia)

T (n) = 2 T (n-1) + C, T (1) = C

Suponga que T (1) = C

T (2) = 2 T (1) + C = 3C = 4C – C = 2 ^ 2 C – C

T (3) = 2 T (2) + C = 7C = 8C – C = 2 ^ 3 C – C

T (4) = 2 T (3) + C = 15C = 16C – C = 2 ^ 4 C – C

T (5) = 2 T (4) + C = 31C = 32C – C = 2 ^ 5 C – C

T (6) = 2 T (5) + C = 63C = 64C – C = 2 ^ 6 C – C

..

T (n) = 2 ^ n C – C

T (n) = 2 ^ (n-1) C

Este es un ejemplo de una relación de recurrencia lineal que en general será exponencial

Ecuación de recurrencia lineal