¿Cuál es la altura promedio de un árbol binario?

10

¿Existe alguna definición formal sobre la altura promedio de un árbol binario?

Tengo una pregunta tutorial sobre cómo encontrar la altura promedio de un árbol binario usando los siguientes dos métodos:

  1. La solución natural podría ser tomar la longitud promedio de todos los caminos posibles desde la raíz hasta una hoja, es decir

    avh1(T)=1# deja en Tv hoja de Tprofundidad(v) .

  2. Otra opción es definirlo de forma recursiva, es decir, la altura promedio de un nodo es el promedio sobre las alturas promedio de los subárboles más uno, es decir

    avh2(norte(l,r))=avh2(l)+avh2(r)2+1

    con para hojas y para espacios vacíos.l avh 2 ( _ ) = 0avh2(l)=1lavh2(_)=0

Según mi comprensión actual, por ejemplo, la altura promedio del árbolT

    1    
   / \
  2   3
 /
4

is por el segundo método, que es usar recursividad.avh2(T)=1.25

Sin embargo, todavía no entiendo cómo hacer el primero. no es correcto.avh1(T)=(1+2)/ /2=1,5

Eterno
fuente
1
¿Puedes proporcionar algún contexto? No existe una definición matemática "correcta"; puede definir la "altura promedio de un árbol binario" como desee. (¿Promedio de qué sobre qué distribución ?) Pero diferentes definiciones serán más o menos útiles para diferentes aplicaciones.
JeffE
@JeffE "No es inmediatamente obvio cómo definir la altura promedio de un árbol binario. Quizás la solución más natural podría ser tener la longitud promedio de los posibles caminos desde la raíz hasta una hoja. Una solución más simple (quizás incluso simplista) es decir que la altura promedio de un nodo es el promedio sobre las alturas promedio de los subárboles más uno. A usted le resulta más fácil codificar esta alternativa. ¿Puede dar ejemplos para demostrar la diferencia? "
Atemporal
Intenté aclarar tu publicación dando definiciones precisas de las dos variantes. Por favor, compruebe que interpreté su texto correctamente. En particular, le faltaba el ancla para la segunda variante; si tomas hojas para tener una altura uno o cero hace la diferencia.
Raphael

Respuestas:

3

No hay razón para creer que ambas definiciones describan la misma medida. También puede escribir recursiva:avh1

avh1(norte(l,r))=lv(l)(unvh1(l)+1)+lv(r)(unvh1(r)+1)lv(l)+lv(r)

con para hojas l . Si no cree que esto sea lo mismo, despliegue la definición de avh 1 en el lado derecho o realice una prueba de inducción.avh1(l)=0 0lavh1

Ahora vemos que funciona de manera bastante diferente a avh 2 . Mientras que avh 2 pesa las alturas recursivas de los niños nodos por igual (sumando y dividiendo entre dos), avh 1 los pesa de acuerdo con la cantidad de hojas que contienen. Por lo tanto, son los mismos (módulo de anclaje) para los árboles con balance de hojas, que se equilibra en el sentido de que los árboles hermanos tienen igualmente tantas hojas. Si simplifica la forma recursiva de avh 1 con lv ( l ) = lv ( r )avh1avh2avh2avh1avh1lv(l)=lv(r)Esto es inmediatamente evidente. En los árboles desequilibrados, sin embargo, son diferentes.

Sus cálculos son correctos (dada su definición); tenga en cuenta que el árbol de ejemplo no está balanceado en hojas.

Rafael
fuente
¿Es posible mostrar el código de implementación para ? No entiendo muy bien cómo hacerlo de forma recursivaavh1
Timeless
avh1
Me refiero al código de implementación usando recursividad
Timeless
@null: puede copiar la fórmula casi literalmente , siempre que incorpore el caso base. Cómo hacerlo depende con precisión de su lenguaje de programación y la implementación del árbol. Le sugiero que recurra a Stack Overflow si la implementación es un obstáculo para usted.
Raphael
2

Editar: Jeffe hace un buen punto en su comentario anterior. Probablemente debería leer "correcto versus incorrecto" en la siguiente respuesta como "conveniente / consistente versus inconsistente".

Parece ser que su segundo cálculo es incorrecto. Deje que la altura de un subárbol con un solo nodo (es decir, una hoja) sea 0. Luego, la altura de la raíz del subárbol en:

  • la altura a las 4 es 0
  • la altura a 3 es 0
  • la altura a 2 es la altura promedio a 3 + 1 = 0 + 1 = 1
  • la altura en 1 es el promedio de las alturas en 2 y 3 = (0 + 1) / 2 + 1 = 1.5

Creo que está haciendo el primer cálculo correctamente, y 1.5 es la respuesta correcta.

Joe
fuente
la idea es un nodo nulo con una altura de -1, basado en el segundo enfoque, la altura promedio de un nodo es el promedio de subárboles más 1, la altura promedio del nodo 4 es ((-1) + (- 1)) / 2 + 1 = 0 , la altura promedio del nodo 2 es (0 + (- 1)) / 2 + 1 = 0.5, por lo que la altura promedio de la raíz es 1.25.
Atemporal
@null Puede definirlo de esa manera si insiste, pero las dos definiciones no serán consistentes.
Joe