2012-07-09 15 views
6

estoy en un poco de un atasco en busca de la fórmula de recurrencia de este método javaSe busca: fórmula de recurrencia del método de salida árbol binario Dentro de la Orden de

void printInorder(Node<T> v) { 
    if(v != null) { 
     printInorder(v.getLeft()); 
     System.out.println(v.getData()); 
     printInorder(v.getRight()); 
    } 
} 

Algunos criterios:

  • su un árbol binario completo (cada nudo interior tiene 2 hijos, cada hoja tiene la misma profundidad)
  • el árbol tiene n nudos y una complejidad de O (n)

Tengo que encontrar la fórmula de recurrencia en relación con el depth h del árbol con n knots, y como una ventaja adicional, necesito extrapolar la fórmula explícita que conduce a O (n) de eso.

Ahora bien, esto es lo que tengo:

d = depth of the tree 
c = constant runtime for execution of the method itself 
d = 1: T(n) = c 
d = 3: T(n) = T(d=1) + T(d=2) + T(d=3) + c 

he usado el ejemplo d = 3 para aclarar las cosas por mí mismo, estoy teniendo dificultades para romper este abajo más lejos. ¿Mi suposición es incluso correcta?


Editar: Siguiente intento de cosas

[x] = { x in real numbers : max([x]) <= x }, [x] rounded down to next full number 
d = 1: T(d) = 1 
d > 1: T(d) = 2^(h-1) * T(n/(2^(h-1))) 

1: T(h) = T(i = 0) + T(i = 1) + ... T(i = h-1) 
2: T(h) <= (2^(0-1) + n/(2^(0-1))) + (2^(1-1) + n/(2^(1-1))) + ... + (2^(h-2) + n/(2^(h-2))) 
3: T(h) = n + n + ... + n 
4: T(h) = (h-1)n 
5: T(h) = O(n) 

Debido a que cada nivel de profundidad del árbol contiene exactamente 2^(h-1) nodos, el factor h en la línea 4 puede ser ignorado porque n es más relevante para el resultado final.

Respuesta

3

T (n) = T (n/2) + T (n/2) + 1

  • Nivel 0 tiene 1 operación.

  • El nivel 1 tiene 2 operaciones.

  • Nivel 2 tiene 4 operaciones.

  • El nivel k tiene 2^k operaciones.

  • La profundidad del árbol es lgn.

1 + 2 + ... + 2^LGN =
2^0 + 2^1 + 2^2 + ... + 2^LGN =
(2^(LGN + 1) -1)/(2-1) = 2 * 2^lgn =
2n.

1

Aquí es un enfoque alternativo utilizando la regla Suavidad (Levitin, El diseño & análisis de algoritmos, 2ª Ed., 481-82), lo que permite una relación de recurrencia de este tipo a ser representado como un exponente en su lugar.

Demonstration of smoothness rule.

Cualquiera de estos enfoques - hacia adelante o hacia atrás sustitución - que es apropiado para este problema. Encuentro que la sustitución hacia atrás en muchos casos es más fácil de digerir.

Cuestiones relacionadas