Foros del Web » Programación para mayores de 30 ;) » C/C++ »

codificacion Huffman

Estas en el tema de codificacion Huffman en el foro de C/C++ en Foros del Web. hola! como estan? tengo un problemita con esta codificacion que hice para Huffman #include <iostream.h> #include <stdio.h> #include <conio.h> const int maxsize = 100; const ...
  #1 (permalink)  
Antiguo 17/04/2013, 22:26
Avatar de pablo777  
Fecha de Ingreso: abril-2013
Ubicación: san luis
Mensajes: 5
Antigüedad: 11 años, 7 meses
Puntos: 0
codificacion Huffman

hola! como estan? tengo un problemita con esta codificacion que hice para Huffman

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
const int maxsize = 100;
const int null = 0;

struct huff_node
{
char symbol;
int freq;
huff_node *parent;
char childtype;
};

typedef huff_node *ptr;
ptr node[maxsize];

void create(int k);
void print(int k);
void twosmall(ptr &p, ptr &q, int numnode);



int main()
{
int numsymbols;
ptr p, q, r;
cout << "Introduce el numero de simbolos: ";
cin >> numsymbols;
for (int i = 0; i < numsymbols; i++)
create(i);


for (int j = numsymbols; j < 2*numsymbols - 1; j++)
{
r = new huff_node;
node[j] = r;
r->parent = null;
twosmall(p, q, j);
p->parent = r;
q->parent = r;
p->childtype = 'L';
q->childtype = 'R';
r->symbol = ' ';
r->freq = p->freq + q->freq;
}
cout << endl << endl;
cout <<"simbolo *-------* codigo: " << endl;
for (int k = 0; k < numsymbols; k++)
print(k);
getch();
return 0;
}

void create(int k)
{
ptr t = new huff_node;
cout << "introduce el simbolo numero " << k+1 << ": ";
cin >> t->symbol;
cout << "introduce su frecuencia: ";
cin >> t->freq;
t->parent = null;
node[k] = t;
}

void print(int k)
{
ptr t = node[k];
char code[10];
int size = 0;
cout << t->symbol << " - ";

while (t->parent != null)
{
if (t->childtype == 'L')
code[size] = '0';
else
code[size] = '1';
t = t->parent;
size++;
}

for (int j = size-1; j >= 0; j--)
cout << code[j];
cout << endl;
}

void twosmall(ptr &p, ptr &q, int numnodes)
{
int min1 = 9999;
int min2 = 9999;
p = null;
q = null;

for (int i = 0; i < numnodes; i++)
{
if (node[i]->parent == null)
{
if (node[i]->freq < min1)
{
min2 = min1;
min1 = node[i]->freq;
q = p;
p = node[i];
}
else
if (node[i]->freq < min2)
{
min2 = node[i]->freq;
q = node[i];
}
}
}
}


funciona de 10, basicamente lo que hace en cada paso es crear el nodo correspondiente y enlazarlo a un arreglo que va a representar a mi arbol, y despues en cada iteracion va buscando los de menor probabilidad y crea un nodo nuevo que es la suma de esas probabilidades, pero solo para hacer la codificacion, no puedo encontrar una forma de hacer la decodificacion a partir de la tabla si tengo que leer un archivo en binario, o no encuentro la forma real de hacerlo

alguien me podria dar una mano tratando de ver como podria llegar a hacerlo? con una idea basta

gracias!

Última edición por pablo777; 18/04/2013 a las 06:22 Razón: codigo mas sencillo

Etiquetas: codificacion, funcion, int, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:54.