¡Recompensa 50! ¡Acerca de los árboles de codificación de Huffman! esperando en línea
Si aún no lo entiendes, me encantaría ver este programa.
//Este programa encontrará un esquema de codificación de Huffman para 26 letras según su frecuencia de aparición
//por jirgal 2005.4.18
#include< iostream.h>
#include #define NUM 26 //número de letras #define TNUM 51 / / p> #define LTH 15 //longitud máxima codificada clase Nodo { público: datos de caracteres. int peso; int parent; int lchild; int rchild; }; void main() { char ch[NUM]={'a','b', 'c','d','e ','f','g','h','i','j','k','l', 'm','n','o ',' p','q','r','s','t','u','v','w','x','y','z'} //26 letras p> int weit[NUM] ={856,139,279,378,1304,289,199,528,627,13,42, 339,249,707,797,199,12,677,607,1045,249,92,149,17,199,8 };// de ocurrencia Nodo nodos[TNUM]; // Usa matriz de objetos para almacenar el árbol de Huffman int i,j,one,two,a,b; int hc [NUM][LTH]; // usado para almacenar la codificación int m,n; for(i= 0;i<.NUM;i++) { nodos[i].data=ch[i]; nodos[i ].weight=weit [i]; nodos[i].parent=-1; nodos[i].lchild=-1; nodos[i]. rchild=-1; } for(i=NUM;i { nodos[i ].data='@'; nodos[i].weight=-1; nodos[i].parent=-1; nodos [i].lchild=-1; nodes[i].rchild=-1; } //Construir el árbol de Huffman for(i=NUM;i p> { a=b=-1; uno=dos =10000; //peso máximo for(j=0;j { if(nodos[ j].parent= =-1) { if( nodos[j].peso<=dos) { uno=dos; p> dos=nodos[j].peso; a=b; b=j; } más si (nodos[j].peso>dos&&nodos[j].peso<=uno) { uno=nodos[j].peso; a =j; } } } }//La declaración for obtiene parent=-1 (es decir, el nodo padre ) y los dos nodos con menor peso nodes[a].parent=i nodes[b].parent=i nodes[; i] .lild=a; nodos[i].rchild=b; nodos[i].peso=nodos[a].peso+nodos[b].peso ; } //inicializar hc for(i=0;i { for(j=0; j { hc[j][i]=7 }<; /p > } //codificación for(i=0;i { j =LTH-1; for(m= i,n=nodos[i].parent;m!=-1;m=n,n=nodos[n].parent) p> { if(nodes[n].lchild==m) { hc[i][j]=0; p> } más { hc[i][j]=1; } j--; } } } //nodos de salida cout<< "HuffmanTree:"< cout< << "parnt"< for( i=0;i { cout< < } //Codificación de salida cout< ;< cout< for(i=0;i { cout< cout<<" "; for(j=0;j { if(hc[i][j]!=7) { cout< } } cout< } cout<<"\nHecho. }