[Structure des données] Compréhension de l'arbre de Huffman et preuve d'optimalité

1. La structure de l'arbre de Huffman

La méthode de construction donnée en classeCela semble plus clair, mais la preuve d'optimalité n'est pas donnée en classe et dans le livre.

2. Preuve d'optimalité

J'ai donc cherché sur Internet et j'ai obtenu une meilleure preuve, qui est reproduite comme suit (avec des corrections mineures et des suppléments) :
(Source https://blog.csdn.net/weixin_42881755/article/details/90714191)
en fait, il s'agit de prouver les choses suivantes :
insérez la description de l'image ici1. Démontrer d'abord que les deux nombres avec le plus petit poids sont les nœuds frères inférieurs

Parce que VL max V_{L_{max}}VLma xest le point de branchement avec la longueur de chemin la plus longue, ses nœuds enfants doivent être des nœuds feuilles. Supposons VL max V_{L_{max}}VLma x​​Il n'y a qu'un seul nœud feuille, V wx V_{w_x}Vwx​, vous pouvez utiliser le nœud enfant V wx V_{w_x}VwxAu lieu du nœud de branche VL max V_{L_{max}}VLma xObtenir un nouvel arbre T n ∗ T_{n}^*Jn​ ,则有:W ( T n ∗ ) = W ( T n ) − wx W ( T_{n}^*) = W ( T_n ) − w_xO ( Tn)=O ( Tn)wx, avec T n T_nJncontredit l'arbre optimal. Ensuite, il doit y avoir deux nœuds feuilles au niveau inférieur.

Si ces deux nœuds ne sont pas les plus petits, alors échangez le plus petit avec ces deux points, alors le chemin pondéré va définitivement diminuer, ce qui contredit l'arbre optimal. , il est donc conclu que les deux nombres avec le plus petit poids sont les nœuds frères inférieurs.

2. Prouver que l'arbre optimal est toujours optimal après rétrécissement et expansion

(Il convient de noter ici que chaque nœud stockant des données est un nœud feuille, il peut donc être étendu et fusionné à volonté sans affecter les autres nœuds)

Général V w 1 , V w 2 V_{w_1}, V_{w_2}Vw1Vw2Deux nœuds feuilles se rétrécissent pour obtenir un nouvel arbre T n − 1 ∗ ( w L max = w 1 + w 2 ) T_{n-1}^*(w_{L_{max} } = w_1+w_2)Jn - 1wLma x=w1+w2), Seigneur Commandeur {w 3 , w 4 .w3w4.... wnw1+w2​}L'arbre optimal est T n − 1 T_{n-1}Jn - 1​, l'arbre obtenu par développement inverse est T n ∗ T_n^*Jn​。则有:
W ( T n ) = W ( T n − 1 ∗ ) + ( w 1 + w 2 ) W(T_n)=W(T_{n-1}^*)+(w_1+w_2)O ( Tn)=O ( Tn - 1)+( w1+w2)
W ( T n - 1 ) = W ( T n ∗ ) - ( w 1 + w 2 ) W(T_{n-1})=W(T_n^*)-(w_1+w_2)O ( Tn - 1)=O ( Tn)( 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}^*)=0O ( Tn)O ( Tn)+O ( Tn - 1)O ( Tn - 1)=0
carT n , T n − 1 T_n, T_{n-1}JnTn - 1est l'arbre optimal si et seulement si W ( T n ) = W ( T n − 1 ∗ ) W(T_n) = W(T_{n-1}^*)O ( Tn)=O ( Tn - 1)W ( T n − 1 ) = W ( T n − 1 ∗ ) W(T_{n-1}) = W(T_{n-1}^*)O ( Tn - 1)=O ( Tn - 1) lorsque l'équation est vraie. Autrement dit,T n ∗ , T n − 1 ∗ T_n^*, T_{n-1}^*JnTn - 1C'est aussi l'arbre optimal.
La proposition est prouvée.

3. La création de l'arbre de Huffman
Maintenant que nous avons obtenu quelques poids, nous voulons le mettre dans l'arbre de codage optimal. D'après la conclusion ci-dessus, notre principe de construction est : trouver les deux plus petits lorsque le bas quitte Node ; rétrécir (additionnez) les deux, mélangez-les avec les poids restants, et répétez l'opération. En fait, c'est le principe de construction de l'arbre de Huffman donné au début.

En résumé, nous avons obtenu la conclusion que l'arbre de Huffman est l'arbre de codage optimal.

#Pour l'apprentissage et la réimpression, l'intrusion et la suppression

Je suppose que tu aimes

Origine blog.csdn.net/qq_56199570/article/details/121403637
conseillé
Classement