[Estructura de datos] Comprensión del árbol de Huffman y prueba de optimización

1. La estructura del árbol de Huffman

El método de construcción dado en clase.Parece más claro, pero la prueba de optimización no se da en clase ni en el libro.

2. Prueba de optimización

Así que busqué en Internet y obtuve una prueba mejor, reproducida de la siguiente manera (con correcciones menores y suplementos):
(Fuente https://blog.csdn.net/weixin_42881755/article/details/90714191)
Para probar lo óptimo De hecho, es probar lo siguiente:
inserte la descripción de la imagen aquí1. Primero probar que los dos números con el peso más pequeño son los nodos hermanos inferiores

Porque VL max V_{L_{max}}VLmáximo _es el punto de bifurcación con la ruta de acceso más larga, sus nodos secundarios deben ser nodos hoja. Supongamos VL max V_{L_{max}}VLmáximo _Solo hay un nodo hoja, V wx V_{w_x}Vwx​, puedes usar el nodo secundario V wx V_{w_x}VwxEn lugar de nodo de rama VL max V_{L_{max}}VLmáximo _Obtener un nuevo árbol T n ∗ T_{n}^*Tnorte​ ,则有:W ( T n ∗ ) = W ( T n ) − wx W ( T_{n}^*) = W ( T_n ) − w_xW ( Tnorte)=W ( Tn)wx, con T n T_nTncontradice el árbol óptimo. Entonces debe haber dos nodos de hoja en la capa inferior.

Si estos dos nodos no son los más pequeños, entonces intercambie los más pequeños con estos dos puntos, entonces la ruta ponderada definitivamente disminuirá, lo que contradice el árbol óptimo. , por lo que se concluye que los dos números con menor peso son los nodos hermanos inferiores.

2. Demostrar que el árbol óptimo sigue siendo óptimo después de la contracción y expansión

(Cabe señalar aquí que cada nodo que almacena datos es un nodo hoja, por lo que puede expandirse y fusionarse a voluntad sin afectar a otros nodos)

General V w 1 , V w 2 V_{w_1}, V_{w_2}Vw1Vw2Dos nodos de hojas se encogen para obtener un nuevo árbol T n − 1 ∗ ( w L max = w 1 + w 2 ) T_{n-1}^*(w_{L_{max} } = w_1+w_2)Tnorte - 1wLmáximo _=w1+w2) , Lord Comandante {w 3 , w 4 .w3w4.... qnw1+w2​}El árbol óptimo es T n − 1 T_{n-1}Tn 1​, el árbol obtenido por expansión inversa es T n ∗ T_n^*Tnorte​。则有:
W ( T n ) = W ( T n − 1 ∗ ) + ( w 1 + w 2 ) W(T_n)=W(T_{n-1}^*)+(w_1+w_2)W ( Tn)=W ( Tnorte - 1)+( w1+w2)
W ( T norte − 1 ) = W ( T norte ∗ ) − ( w 1 + w 2 ) W(T_{n-1})=W(T_n^*)-(w_1+w_2)W ( Tn 1)=W ( Tnorte)( w1+w2)
整理得:
W ( T n ) − W ( T n ∗ ) + W ( T n − 1 ) − W ( T n − 1 ∗ ) = 0 W(T_n)-W(T_{n}^*)+ W(T_{n-1})-W(T_{n-1}^*)=0W ( Tn)W ( Tnorte)+W ( Tn 1)W ( Tnorte - 1)=0
porqueT norte , T norte − 1 T_n, T_{n-1}TnTn 1es el árbol óptimo si y solo si W ( T n ) = W ( T n − 1 ∗ ) W(T_n) = W(T_{n-1}^*)W ( Tn)=W ( Tnorte - 1)W ( T norte − 1 ) = W ( T norte − 1 ∗ ) W(T_{n-1}) = W(T_{n-1}^*)W ( Tn 1)=W ( Tnorte - 1) cuando la ecuación se cumple. Es decir,T n ∗ , T n − 1 ∗ T_n^*, T_{n-1}^*TnorteTnorte - 1También es el árbol óptimo.
La proposición está probada.

3. La creación del árbol de Huffman
Ahora que hemos obtenido algunos pesos, queremos ponerlo en el árbol de codificación óptimo De acuerdo con las conclusiones anteriores, nuestro principio de construcción es: encontrar los dos más pequeños como las hojas inferiores Nodo; sume) los dos, mézclelos con los pesos restantes y repita la operación. De hecho, este es el principio de construcción del árbol de Huffman dado al principio.

En resumen, hemos obtenido la conclusión de que el árbol de Huffman es el árbol de codificación óptimo.

#Para aprendizaje y reimpresión, intrusión y eliminación

Supongo que te gusta

Origin blog.csdn.net/qq_56199570/article/details/121403637
Recomendado
Clasificación