主题:构造哈夫曼树并可以演示构造过程
hongyeqing
[专家分:0] 发布于 2006-05-28 15:35:00
设计程序以实现构造哈夫曼树的哈夫曼算法,要求如下:
1.可以实验工具的有关功能.
2,要能演示构造过程.
3.求解出所构造的哈夫曼树的带权路径长度.
可以帮我做一下吗?谢谢了
回复列表 (共2个回复)
沙发
雨523 [专家分:200] 发布于 2006-05-29 07:43:00
2.构造过程就是要每一步都显示出执行结果来;
3 将结点所在的权值与其路径值进行乘积累和以后的计算;
板凳
sk8erboy [专家分:10] 发布于 2006-05-30 00:45:00
#pragma once
#include <malloc.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
class CHuffman
{
typedef struct{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef unsigned char** HuffmanCode;
struct BYTE_8{
unsigned char data;
unsigned operator [](int i)const{
unsigned char tmp=data;//*(unsigned char*)this;
if(tmp&(1<<(i-1)))
return 1;
return 0;
}
};
protected:
//在HuffmanTree HT中选择两个权值最小的树的编号
void Select(HuffmanTree HT,int num,int &s1,int &s2);
//根据权值构造Huffman树HT,并进行编码
void HuffmanCoding(HuffmanTree &HT,HuffmanCode&HC,unsigned int*weight,int n);
//在一个字节中设置某个位的值,j介于1与8之间,c为0或1
void setBit(BYTE_8&b,int j,unsigned char c);
//清零
void setByte0(BYTE_8&b);
//利用折半查找法,在charSet中查找ch的位置
void FindIndex(const char &ch,int &i,const unsigned char*charSet,int setNum);
//根据Huffman编码集HC与符号集charSet,将origbuff压缩到destbuff中
void Coding(const unsigned char*origbuff,unsigned char*&destbuff,int origNum,int destNum,
const HuffmanCode &HC, const unsigned char*charSet,int setNum);
//根据b的第j位的值(0或1),计算Huffman树HT的第p个元素的孩子的位置
int Child(const HuffmanTree &HT,int p,int&j,const BYTE_8 &b);
//根据Huffman编码集HC与符号集charSet,将origbuff解压到destbuff中
void UnCoding(const unsigned char*origbuff,const HuffmanTree &HT,unsigned char*&destbuff,int root,int len, const unsigned char*charSet);
public:
//将文件sourcefile中的数据流压缩到文件destfile中
void compress(const char*sourcefile,const char*destfile);
//将文件sourcefile中的数据流解压到文件destfile中
void uncompress(const char*sourcefile,const char*destfile);
CHuffman(void);
~CHuffman(void);
};
我来回复