[2019][Julio][Problema 2]

[2019][Julio][Problema 2]

de Bruno Emanuel Gandos Telis -
Número de respuestas: 2

Buenas, hay algo que no entiendo en el cálculo del stack de este ejercicio. En este ejercicio se plantea que dado un árbol de N nodos con altura log_2(N) y cada paso consume 12 bytes, entonces el consumo seria 12*(log_2(N) + 1) bytes. 

¿Esto tiene sentido? pregunto esto ya que no todos los niveles de un árbol consumen lo mismo. Mi razonamiento fue el siguiente: 

Nivel 0: -> 1 problema de tamaño N que consume 12 bytes => Total: 12 bytes.

Nivel 1: -> 2 problemas de tamaño N/2 que consumen 12 bytes cada uno => Total: 2x12 bytes

...

Nivel i: -> 2^i problemas de tamaño N/(2^i) que consumen 12 bytes cada uno => Total: (2^i)x12bytes.

Despejando y haciendo cuentas llego a que tengo un total de log2(N) + 1 niveles (al igual que la solución) pero el consumo del paso N esta dado por la ecuación:  sumatoria de 12*2^i bytes, con i desde 0 hasta log_2(N).

Adjunto foto debajo de mi razonamiento, en mi caso consume 14bytes en vez de 12. 

Gracias.

Adjunto 1.jpg
En respuesta a Bruno Emanuel Gandos Telis

Re: [2019][Julio][Problema 2]

de Gustavo Brown -

Bruno,

  La parte 2 te pide el consumo máximo de stack. Para ello tenés que tener en cuenta que el stack es una estructura dinámica (se colocan datos en el y también se quitan). 

Entonces para el cálculo del consumo máximo tenes que ir viendo para cada recursión que se haga cual es el máximo que se llega, luego tener en cuenta si al retornar de esa recursión queda algo en el stack y calcular cuanto se consume en la siguiente llamada recursiva, y así sucesivamente. Y te vas quedando siempre con el peor caso (el consumo máximo que se haya obtenido para cada rama de la recursión).

En este ejercicio en particular y basado en nuestra solución se tiene cierto árbol de altura N, donde N es "ceil(log_2(MAX_LARGO))", compatible con el arreglo donde se almacena en memoria el árbol.
Cuando recorrés la rama izquierda del árbol binario se calcula cierto consumo stack, y antes de recorrer la rama derecha del mismo se recupera todo ese espacio. Luego se puede calcular el consumo de stack de la rama derecha del árbol binario y te quedás con el peor caso.
Parado en la raíz del árbol al menos una de las 2 ramas va a haber hecho N recursiones (porque el árbol tiene altura N) más el paso base. Y como cada paso consume 12 bytes se llega al resultado de 12 * (N+1) bytes.

Saludos,
  Gustavo