资源简介
对26个英文字母(已知它们的概率分布)进行了哈夫曼编码,并计算了编码效率。有助于大家理解哈夫曼编码以及信息论的相关知识哦。
代码片段和文件信息
//得到26个英文字母的哈夫曼编码,并计算编码效率和压缩比
#include
#include
#include
#define K 26 //26个字母
#pragma comment(linker “/subsystem:console“)
struct code //二元码字
{
int cod; //二元码字,存放在int cod的各位中
char len_cod; //码字长度
float prob; //在符号空间中出现的概率
};
struct tree //用于得到哈夫曼码构造的哈夫曼树
{
float prb[2*K-1]; //2*K-1个结点
char left[K-1]; //左孩子
char right[K-1]; //右孩子
};
float pcb[K]={8.191.473.833.9112.252.261.714.57
7.100.140.413.773.347.067.262.89
0.096.856.369.412.581.091.590.21
1.580.08}; //26个英文字母概率矢量(百分比)
code hufcode[K]; //哈夫曼编码
tree huftree; //哈夫曼树
void add_sig_0(char node); //递归函数
void add_sig_1(char node); //往某结点下所有叶子结点对应的码字添加0或1
void main()
{
int i;
char min1=0min2=0; //俩最小值的index
char visit[2*K-1]; //各结点是否被访问过
memset(visit02*K-2);
//初始化
for(i=0;i {
hufcode[i].prob=huftree.prb[i]=pcb[i]/100; //概率,赋给码字,也赋给树的叶子结点
hufcode[i].len_cod=0; //码字从、长度
hufcode[i].cod=0; //码字
}
//找最小并合并,K-1次
for(int cnt=0;cnt {
//先从头找到第一个没被访问过的
for(i=0;i if(visit[i]==0) //没被访问过
{
min1=i;
break;
}
//找第二个没被访问过的
for(i=i+1;i if(visit[i]==0)
{
if(huftree.prb[i]
- 上一篇:UDP协议客户端服务器间视频传输c源码
- 下一篇:二叉树成绩管理系统
相关资源
- 哈夫曼编码解码的实现及运行截图C语
- 哈夫曼编码译码器绝对可以运行c语言
- 哈夫曼树设计——利用哈夫曼编码进
- 数据结构C语言之哈夫曼编码
- 自适应哈夫曼编码C++
- 哈夫曼编码与解码(C语言实现)
- 用哈夫曼编码实现文件压缩代码+报告
- 哈夫曼编码译码器 C语言 数据结构课
- 哈夫曼编码与译码附报告
- 哈夫曼编码系统C语言实现
- 数据结构哈夫曼编码译码C语言版程序
- C语言-哈夫曼编码实验报告
- 基于哈夫曼编码的文件压缩解压程序
- 哈夫曼编码译码器实验报告内
- 哈夫曼编码
- c++实现的哈夫曼编码和解码源代码
- C++哈夫曼编码与译码课程设计实现源
- C++实现哈夫曼树及哈夫曼编码.rar
- n元哈夫曼编码
- 基于哈夫曼编码的文本文件压缩与解
- 基于C++和MFC的哈夫曼编码压缩软件的
- 数据结构实验-哈夫曼编码C语言实现实
- 哈夫曼编码 (C++实现)
- 哈夫曼编码(c++实现)
- 香农编码 哈夫曼编码 信息论期中作业
- 哈夫曼编码器c代码
- MFC下的哈夫曼编码及应用
- C语言编码哈夫曼树
- Huffman文件压缩解压缩-C语言-数据结构
- 哈夫曼编码(C语言版)
评论
共有 条评论