Red de conocimiento informático - Conocimiento del nombre de dominio - ¡Recompensa 50! ¡Acerca de los árboles de codificación de Huffman! esperando en línea

¡Recompensa 50! ¡Acerca de los árboles de codificación de Huffman! esperando en línea

¿Aprobaste el examen de hermano? Espero que la respuesta sea sí.

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 / /

#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

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)

{

if(nodes[n].lchild==m)

{

hc[i][j]=0;

}

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.

}