Veamos el primero. Antes que nada, necesitas saber T (caso base). Mencionaste que es una constante, pero cuando haces el problema, es importante que lo anotes. Usualmente es algo como T (1) = 1. Lo usaré, pero puedes generalizar a lo que sea.
A continuación, descubra cuántas veces recurre (es decir, la altura del árbol de recursión). n
es el tamaño de su problema, así que ¿cuántas veces podemos dividir repetidamente n por 2? En términos matemáticos, ¿qué ocurre cuando n/(2^i) = 1
? Compruébelo, agárrelo para más tarde.
A continuación, haga algunas sustituciones, hasta que comience a notar un patrón.
T(n) = 2(2(2T(n/2*2*2) + θ(1)) + θ(1)) + θ(1)
Ok, el patrón es que multiplicamos T() por 2 un montón de veces, y dividir n por 2 un montón de veces. ¿Cuantas veces? i
veces.
T(n) = (2^i)*T(n/(2^i)) + ...
Para los períodos de grandes θ al final, se utiliza un truco lindo. Mire arriba donde tenemos algunas sustituciones e ignore la parte T(). Queremos la suma de los θ términos. Tenga en cuenta que suman hasta (1 + 2 + 4 + ... + 2^i) * θ(1)
. ¿Puedes encontrar un formulario cerrado para 1 + 2 + 4 + ... + 2^i
?Te daré ese; es (2^i - 1)
. Es bueno memorizar, pero here's how you'd figure it out.
De todos modos, todo en todo lo que tenemos
T(n) = (2^i) * T(n/(2^i)) + (2^i - 1) * θ(1)
Si resuelve para i
antes, entonces usted sabe que i = log_2(n)
. Conecta eso, haz algo de álgebra, y obtienes el
T(n) = n*T(1) + (n - 1)*θ(1)
. T(1) = 1
. Entonces T(n) = n + (n - 1)*θ(1)
. Que es n veces una constante, más una constante, más n. Soltamos términos y constantes de orden inferior, por lo que es θ (n).
Prasoon Saurav tiene razón sobre el uso del método maestro, pero es importante que sepa lo que está diciendo la relación de recurrencia. Las preguntas son: ¿cuánto trabajo debo hacer en cada paso y cuál es el número de pasos para una entrada de tamaño n
?
Voy a votar para cerrar esta pregunta como fuera de tema porque es una pregunta matemática, no una pregunta de programación. – ProgramFOX