回 帖 发 新 帖 刷新版面

主题:构造哈夫曼树并可以演示构造过程

设计程序以实现构造哈夫曼树的哈夫曼算法,要求如下:
1.可以实验工具的有关功能.
2,要能演示构造过程.
3.求解出所构造的哈夫曼树的带权路径长度.
可以帮我做一下吗?谢谢了

回复列表 (共2个回复)

沙发

2.构造过程就是要每一步都显示出执行结果来;
3 将结点所在的权值与其路径值进行乘积累和以后的计算;

板凳

#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);
};

我来回复

您尚未登录,请登录后再回复。点此登录或注册