Cómo resolver la recurrencia [matemáticas] T (n) = 3T \ left (\ frac {n} {2} \ right) + n \ sqrt {n + 1}

En primer lugar, esta recurrencia se puede escribir como [matemática] T (n) = 3T (n / 2) + \ Theta \ left (n * sqrt (n + 1) \ right) [/ math] = [math] 3T (n / 2) + \ Theta \ left (n * sqrt (n) \ right) [/ math] = [math] 3T (n / 2) + \ Theta \ left (n ^ {{3/2}} \ derecha) [/ matemáticas]

Ahora, usaremos el Teorema maestro, que establece que si [matemática] T (n) = aT (n / b) + f (n) [/ matemática] donde [matemática] a> = 1 [/ matemática] y [ matemáticas] b> 1 [/ matemáticas], hay tres casos siguientes:

1. Si [math] f (n) = \ Theta \ left (n ^ {{c}} \ right) [/ math] donde [math] c <\ log _ {b} a [/ math] entonces [math ] T (n) = \ Theta \ left (n ^ {{\ log _ {b} a}} \ right) [/ math]
2. Si [math] f (n) = \ Theta \ left (n ^ {{c}} \ right) [/ math] donde [math] c = \ log _ {b} a [/ math] entonces [math ] T (n) = \ Theta \ left (n ^ {{c}} logn \ right) [/ math]
3. Si [math] f (n) = \ Theta \ left (n ^ {{c}} \ right) [/ math] donde [math] c> \ log _ {b} a [/ math] luego [math ] T (n) = \ Theta \ left (f (n) \ right) [/ math]

Aquí, [math] \ log_ {2} 3 = 1.585 [/ math] y [math] c = 1.5 [/ math]. Por lo tanto, el nuestro es el caso (1) y, por lo tanto, [matemáticas] T (n) = \ Theta \ left (n ^ {{\ log _ {b} a}} \ right) = \ Theta \ left (n ^ {1.585 } \ right) [/ math]

Tennesse)
= 3T (n / 2) + n * sqrt (n)
= 3 (3T (n / 4) + n * sqrt (n / 2) / 2) + n * sqrt (n)
= 3 ^ log_2 (n) * T (1) + n * sqrt (n) (1 + 1.5 * sqrt (1/2) + 1.5 * 1.5 * sqrt (1/4) …)
= 3 ^ log_2 (n) * T (1) + n * sqrt (n) (1 – {1.5 / sqrt (2)} ^ log_2 (n)} / {1 – 1.5 / sqrt (2)}

En términos de complejidad, esto será O (n ^ (log_2 (3)))

(Admito que eliminé el “+1” en el signo sqrt para simplificar la solución).

La mayoría de los problemas de este tipo se pueden resolver utilizando el “teorema maestro”: Teorema maestro.

Puedes pensar en tu recurrencia como un árbol. El nivel superior toma n * sqrt (n + 1) pasos. En el siguiente nivel, tiene tres llamadas diferentes, y cada una toma (n / 2) * sqrt (n / 2 + 1) pasos. El siguiente nivel tiene 9 llamadas diferentes, y así sucesivamente, hasta que llegue a su caso base.

El trabajo total realizado es la suma del trabajo en cada nivel. El número de niveles en este caso es log_2 (n), porque n se divide por dos en cada paso. Hay tres casos diferentes.

Caso 1: Si el trabajo realizado en cada nivel aumenta, entonces el trabajo total será solo un factor constante más que el trabajo realizado en el nivel inferior.

Caso 2: Si el trabajo realizado en cada nivel es constante, entonces el trabajo total será el trabajo realizado en un solo nivel, multiplicado por la altura de nuestro árbol. En este caso, la altura es log_2 (n), porque n se divide por 2 en cada paso.

Caso 3: Si el trabajo realizado en cada nivel disminuye, entonces el total será solo un factor constante más que el trabajo realizado en el nivel superior.
En este problema particular, el trabajo realizado en el nivel superior es [matemáticas] n ^ {3/2}, [/ matemáticas] y el trabajo realizado en el nivel inferior es [matemáticas] 3 ^ {log_2 (n)} = n ^ {log_2 (3)}. [/ math] (Esa última simplificación es con frecuencia útil cuando se trabaja con registros, y puede probarse tomando el registro de ambos lados).

[math] log_2 (3) [/ math] es aproximadamente 1,58, que es mayor que 3/2. Por lo tanto, el trabajo realizado en el nivel inferior domina el tiempo de ejecución. Por lo tanto, el tiempo total de ejecución es [matemática] O \ left (n ^ {log_2 (3)} \ right) [/ math]