求哈夫曼编译码的代码解决方法
求哈夫曼编译码的代码
1、接受原始数据
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmtree.dat中。
2、编码
利用已建好的哈夫曼树(如不在内存,则从文件hfmtree.dat中读入),对文件中的正文进行编码,然后将结果存于文件codefile.dat中。
3、译码
利用已建好的哈夫曼树将文件codefile.dat中的代码进行译码,结果存入文件textfile.dat中。
4、打印编码规则
即字符与编码的一一对应关系。
------解决方案--------------------
可以参考我的博客,里面的程序是我自己写的,如有疑问可以留言交流。
http://blog.****.net/thefutureisour/article/details/7888893
------解决方案--------------------
http://blog.****.net/a174787252/article/details/7261311
------解决方案--------------------
#include <iostream>
#include <malloc.h>
using namespace std;
//存储树的节点
typedef struct {
int weight;
int parent,lchild,rchild;
}HTNode,*HuffmanTree;
//找到s1,s2,tmp(下标)中,值更小的两个节点
//权重更小的节点下标存在s1,次小存在s2
//以下程序类似对三个数进行排序
void compare(HuffmanTree &HT,int &s1,int &s2,int temp)
{
if(HT[s1].weight <=HT[temp].weight &&HT[s1].weight<=HT[s2].weight )
{
if(HT[s2].weight >HT[temp].weight )
s2=temp;
}
else if(HT[s2].weight <=HT[temp].weight &&HT[s2].weight <=HT[s1].weight )
{
if(HT[s1].weight >HT[temp].weight )
{ s1=s2;
s2=temp;
}
else
{
temp=s1;
s1=s2;
s2=temp;
}
}
else
{
if(HT[s1].weight <HT[s2].weight )
s2=s1;
s1=temp;
}
}
//在n个节点中选择权重更小的两个节点
void Select(HuffmanTree&HT,int n,int &s1,int &s2)
{
int i=1,temp;
while(HT[i].parent !=0) i++;
s1=i++;
while(HT[i].parent !=0) i++;
s2=i++;
for(;i<=n;i++)
{
while(HT[i].parent !=0)i++;
1、接受原始数据
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmtree.dat中。
2、编码
利用已建好的哈夫曼树(如不在内存,则从文件hfmtree.dat中读入),对文件中的正文进行编码,然后将结果存于文件codefile.dat中。
3、译码
利用已建好的哈夫曼树将文件codefile.dat中的代码进行译码,结果存入文件textfile.dat中。
4、打印编码规则
即字符与编码的一一对应关系。
------解决方案--------------------
可以参考我的博客,里面的程序是我自己写的,如有疑问可以留言交流。
http://blog.****.net/thefutureisour/article/details/7888893
------解决方案--------------------
http://blog.****.net/a174787252/article/details/7261311
------解决方案--------------------
#include <iostream>
#include <malloc.h>
using namespace std;
//存储树的节点
typedef struct {
int weight;
int parent,lchild,rchild;
}HTNode,*HuffmanTree;
//找到s1,s2,tmp(下标)中,值更小的两个节点
//权重更小的节点下标存在s1,次小存在s2
//以下程序类似对三个数进行排序
void compare(HuffmanTree &HT,int &s1,int &s2,int temp)
{
if(HT[s1].weight <=HT[temp].weight &&HT[s1].weight<=HT[s2].weight )
{
if(HT[s2].weight >HT[temp].weight )
s2=temp;
}
else if(HT[s2].weight <=HT[temp].weight &&HT[s2].weight <=HT[s1].weight )
{
if(HT[s1].weight >HT[temp].weight )
{ s1=s2;
s2=temp;
}
else
{
temp=s1;
s1=s2;
s2=temp;
}
}
else
{
if(HT[s1].weight <HT[s2].weight )
s2=s1;
s1=temp;
}
}
//在n个节点中选择权重更小的两个节点
void Select(HuffmanTree&HT,int n,int &s1,int &s2)
{
int i=1,temp;
while(HT[i].parent !=0) i++;
s1=i++;
while(HT[i].parent !=0) i++;
s2=i++;
for(;i<=n;i++)
{
while(HT[i].parent !=0)i++;