c语言实现赫夫曼信源编码,哈夫曼信源编码c语言程序代码.doc
哈夫曼信源编码c语言程序代码
哈夫曼编码的C语言实现
编码原理程序步骤的分析:
哈夫曼码是用概率匹配方法进行信源编码。编程时应该注意:1,概率大的符号对应于短码,概率小的对应于长码,充分利用短码;2缩减信源的最后二个码字,总是最后一位不同,保证了哈夫曼码是即时码。程序步骤:(见信息论课本p88页内容)
(l)将信号源的符号按照出现概率递减的顺序排列。
(2)将两个概率最小的字母分别配以0和1两个码元,并将这两个概率相加作为一个新字母的概率
(3)重排后的两个概率最小符号重复步骤(2)过程。
(4)不断继续上述过程,直到最后两个符号配以0和1为止
(5)从最后一级开始向前返回各个信源符号所对应的码元序列,及相应的码字。
根据以上规则编码可知:哈夫曼编码实际上构造了一个码树,码树从最上层的端点开始构造,到树根结束,最后得到一个横放的码树,所以编出的码是即时码。哈夫曼编码概率大的符号对应于短码,概率小的符号对应于长码,使平均码长最小。每次对概率最小的两个符号求概率之和形成缩减信源时,构造出两个树枝,由于给两个树枝赋码元时是任意的,因此编出的码字不惟一。
程序源代码如下;
#include
#include
#include
#include
#include
#define HuffmanTree HF
#define HuffmanCode HMC
typedef struct
{unsigned int weight;
unsigned int parent,lchild,rchild;
} HTNode,*HF;
typedef char **HMC;
typedef struct {
unsigned int s1;
unsigned int s2;
} MinCode;
void Error(char *message);
HMC HuffmanCoding(HF HT,HMC HC,unsigned int *w,unsigned int n);
MinCode Select(HF HT,unsigned int n);
void Error(char *message)
{
fprintf(stderr,"Error:%s\n",message);
exit(1);
}
HMC HuffmanCoding(HF HT,HMC HC,unsigned int *w,unsigned int n)
{
unsigned int i,s1=0,s2=0;
HF p;
char *cd;
unsigned int f,c,start,m;
MinCode min;
if(n<=1) Error("Code too small!");
m=2*n-1;
HT=(HF)malloc((m+1)*sizeof(HTNode));
for(p=HT,i=0;i<=n;i++,p++,w++)
{
p->weight=*w;
p->parent=0;
p->lchild=0;
p->rchild=0;
}
for(;i<=m;i++,p++)
{
p->weight=0;
p->parent=0;
p->lchild=0;
p->rchild=0;
}
for(i=n+1;i<=m;i++)
{
min=Select(HT,i-1);
s1=min.s1;
s2=min.s2;
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
printf("HT List:\n");
printf("Number\t\tweight\t\tparent\t\tlchild\t\trchild\n");
for(i=1;i<=m;i++)
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\n",
i,HT[i].weight,HT[i].parent,HT[i].lchild,HT[
c语言实现赫夫曼信源编码,哈夫曼信源编码c语言程序代码.doc相关推荐
- 钢琴软件c语言源代码,C语言钢琴程序代码.doc
C语言钢琴程序代码.doc 把以下程序复制粘贴到Visual c++6.0,点编译与连接,不要点编译,不然会出错,这个程序就没用了,在强调一下:点编译与链接.然后点执行,就可以开始弹钢琴了.最后附有一 ...
- c语言课程设计作业图书管理系统,C语言课程设计图书馆管理系统程序代码.doc
C语言课程设计图书馆管理系统程序代码.doc includestdio.h includewindows.h includestring.h includeconio.h define M 100 s ...
- c语言b=x%1000 100什么意思,C语言程序-设计 100个小程序代码.doc
1.素数 1. [100,999]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以10所得的余数是百位数字:⑵该数是素数; 求有多少个这样的数? 15 #include int ...
- 赫夫曼树建立c语言源程序编译结果详细解释,哈夫曼树的建立与实现最终版(备份存档)...
<哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...
- 【数据结构】【哈夫曼树】哈夫曼树、赫夫曼树(Huffman Tree)C语言实现
目录 一.哈夫曼树定义与原理 二.构建哈夫曼树 三.哈夫曼编码 完整代码: 前言:章末含c语言实现完整代码 一.哈夫曼树定义与原理 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权 ...
- huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码
艾薇巴蒂!许久不见甚是想念,想必这"涨姿势"的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码 构造哈夫曼树 首先,我们需要了解哈夫曼树是什么: 相关知 ...
- 数据结构c语言版胡学刚答案,哈夫曼树的建立与实现(最终版)最新版
<哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...
- 哈夫曼java_哈夫曼树和哈夫曼编码介绍以及Java实现案例
1.哈夫曼树 1.1哈夫曼树简介 哈夫曼树:给定N个权值作为N个叶子节点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树 ...
- 15哈夫曼树/哈夫曼编码
文章目录 哈夫曼树的基本概念 哈夫曼树的特点 哈夫曼树的构造算法 1. 哈夫曼树的构造过程 代码实现 哈夫曼编码 文件的编码和解码 哈夫曼树的基本概念 哈夫曼树又称为最优树,作用是找到一种效率最高的判 ...
- 哈夫曼树 哈夫曼编码
哈夫曼树 哈夫曼树的定义:设二叉树具有 n 个带权值的叶节点,那么从根节点到各个叶节点的路径长度与相应叶节点权值的乘积的和,叫作二叉树的带权路径长度 WPL (Weighted Path Length ...
最新文章
- 友盟-统计不到线上应用数据的坑
- java bean销毁,销毁Spring Bean的三种方法
- Ubuntu中的超级兔子:Tweak安装教程
- Opencv开闭运算去除反光噪声
- 【前沿】何恺明大神ICCV2017最佳论文Mask R-CNN的Keras/TensorFlow/Pytorch 代码实现
- 同步、异步、阻塞、非阻塞、BIO、NIO、AIO
- vue中的组件导航守卫,个人理解
- 数据挖掘:分享两个Pandas使用小陷阱
- 权限基本操作:实体类和dao
- 学习LD_PRELOAD之摘抄
- C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
- 解惑图数据库!你知道什么是图数据库吗?
- LeetCode 205. 同构字符串(哈希map)
- 【转载】这是我看过最好的对HTTPS的理解
- 转Linux多线程条件下的计数器 2011-11-15 00:00中国IT实验室佚名
- Python实现多重弹窗脚本 整蛊朋友
- cs229吴恩达机器学习课件
- com组件--GUID
- 2020大学计算机答案,超星2020大学计算机基础答案 全
- 医院子母钟系统-YZ-9200
热门文章
- Hadoop面试试题
- libcrypto yum 安装_centos7下nginx 报错需要安装 libcrypto.so.10(OPENSSL_1.0.2)(64bit)
- ul阻燃标准有几个等级_UL阻燃标准
- opencv摄像头异常处理
- 三菱Q系列ST、结构化编程、QD77定位以及转矩模式切换案例
- 基于Matlab/Simulink的1/4车辆系统动力学模型的两种建模方法(动力学建模入门知识)
- STELLA—系统动力学仿真软件 System Dynamics仿真
- 窗方法原理之矩形窗及汉明窗
- 强化学习——Q-learning算法
- java职业教育考试题_云课堂智慧职教java职业证书题库答案