概率分布 Huffman编码 c语言实现,北京科技大学信息论与编码实验报告C语言版.docx...

《信息论与编码》

实验报告

姓名:***

学号:***

班级:***

指导教师:**

2017年6月

B.1信道容量的迭代算法

【实验目的】

(1)熟悉和理解信道容量的迭代算法;

(2)利用C编程语言实现该算法的功能;

(3)掌握上机调试程序和键盘输入数据得出结果的方法;

【实验要求】

1)已知:信源符号个数r、信宿符号个数s、信道转移概率矩阵P=(Pji)r*s;

2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入;

3)输出:最佳信源分布P’*,信道容量C。

【程序流程图】

输入P

llogΦji

ΦIJ

C

输出

终止

【运行结果】

B.2唯一可译码的判断代码

【实验目的】

(1)熟悉和理解唯一可译码的判决规则;

(2)利用C编程语言实现该算法的功能;

(3)掌握上机调试程序和键盘输入数据得出结果的方法;

【实验要求】

(1)已知:信源符号个数r、码字集合C;

(2)输入:任意的一个码,码字个数和每个具体的码字在运行时从键盘输入;

(3)输出:判决(是唯一可译码/不是唯一可译码)

开始

【程序流程图】

输入信源符号个数r,码字集合C

判断是否为奇异码

判断前缀,有无后缀

构造后缀集合F

F是否存在元素为C中码字

输出不是唯一可译

F与C是否有相同前缀

输出是唯一可译

结束

【运行结果】

B.3 Huffman编码

【实验目的】

(1)熟悉和理解Huffman编码的意义和过程;

(2)利用C编程语言实现该算法的功能;

(3)掌握上机调试程序和键盘输入数据得出结果的方法;

【实验要求】

(1)已知:信源符号个数q,信源符号S0,S1,……Sq-1,信源概率分布P0,P1……Pq-1;

(2)输入:信源符号个数r,信源的概率分布P;

(3)输出:每个信源符号对应的Huffman编码的码字。

【程序流程图】

开始

从主函数中获取各个字符及其权值,再调用Huffman函数

定义哈夫曼树节点和哈弗曼编码表类型并用typedef声明类型

初始化哈夫曼树

查找权值最小的两个节点x1、x2

定义节点n+i为x1和x2节点的父节点、其权值为二者之和

P是根节点?

循环n次

定义c为当前要求码字的节点,p指向要求的编码表

P节点的左孩子为c?

码字加1

T

F

T

F

输出第i个符号码字

结束

码字加0

P指向向根节点移动

每执行一次,输出一个符号的码字,一共执行n次

【运行结果】

B.4 LZW编码

【实验目的】

(1)熟悉和理解LZW编码的意义和过程;

(2)利用C编程语言实现该算法的功能;

(3)掌握上机调试程序和键盘输入数据得出结果的方法;

【实验要求】

(1)已知:待压缩的数据文件;

(2)输入:本程序将从标准输入中读入待压缩的数据;

(3)输出:将压缩结果输出到标准输出上去。

【程序流程图】

【运行结果】

B.5香农编码

【实验目的】

(1)熟悉和理解香农编码的意义和过程;

(2)利用C编程语言实现该算法的功能;

(3)掌握上机调试程序和键盘输入数据得出结果的方法;

【实验要求】

(1)输入:信源符号个数q,信源符号S0,S1,……Sq-1,信源的概率分布P0,P1……Pq-1,;

(2)输出:信源符号与码字的对应关系表(编码表)。

【程序流程图】

开始

输入符号个数N和相应概率X[i]

按概率由大到小排序

按公式求码长

求出对应位的概率累加和

按乘2取余法则,将累加概率转换为二进制

结合求得的对应码长,将二进制的累加概率取对应长度的作为相应码字

输出信源、概率、累加概率、码长和码字

结束

【运行结果】

【实验心得】

本次信息论上机课我使用VC6.0软件,使用C语言分别实现了信道容量的迭代算法,唯一可译码判决规则,哈夫曼编码,LZW编码和香农编码的算法程序,并且予以调试和运行,在调试无错误后,使用键盘输入相应的符号个数以及概率矩阵,得到了的结果与自己理论计算的结果完全相同,验证了自己所学习的理论知识,同时使用的相应的算法语句能够得到多次有效的运用,能够在以后的学习生活中得到再次应用。

本次实验中遇到的问题主要是程序的出错调试问题,在VC6.0软件中运行时,部分程序会出现错误,我通过查阅相关资料,根据软件报错提醒的错误位置和内容,修改了相应的个别语句,多次尝试后运行成功,使用键盘输入数据时,要根据运行框里面的提示一步步输入数据,得到相应的结果,并且与理论值对比,得出结论。

本次实验我不仅更加熟悉了这五种编码方法的原理,方法和过程,而且提高了自己利用算法来实现编码功能的能力,也增加了对《信息论与编码》这门课程的兴趣,可以说收获颇多。

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值