关于哈夫曼编码的一道题
来源:百度知道 编辑:UC知道 时间:2024/05/18 06:51:26
Huffman编码:数据通信用的二进制编码
编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列.
例 要传输的字符集 D={C,A,S,T, ; }
字符出现频率 w={ 2,4, 2, 3, 3}
T : 00
; : 01
A : 10
C : 110
S : 111
例 电文是{CAS;CAT}
其编码 “11010111011101000”
下面是我写的一个程序,希望能满意。
#include<iostream>
using namespace std;
struct htnode
{
char ch;
int weight;
int parent;
int lchild,rchild;
};
class huffmantree
{
public:
void code(char str1[],int w[],int n);
void uncode(char str1[],char str2[],int n);
private:
htnode ht[3000];
void creathuffmantree(char str1[],int w[],int n);
void select(int pos,int &r1,int &r2);
};
void huffmantree::select(int pos,int &r1,int &r2)
{
r1=r2=0;
for(int i=1;i<=pos;i++)
{
if(ht[i].parent!=0)