- 1、本文档共65页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机与信息学院
信息论与编码 实验报告
专 业 班 级 信息安全13-1班 学生姓名及学号 马骏 2013211869 课程教学班号 任 课 教 师 苏兆品 实验指导教师 苏兆品 实验地点 逸夫楼
2014 ~2015 学年第 一 学期
实验1 霍夫曼编码
基本要求
通对任意输入的字符串序列进行3元霍夫曼编码,给出编码结果、编码效率;并实现相应的译码操作。
提升要求
对一幅BMP格式的灰度图像进行二元霍夫曼编码。
问题描述
三元霍夫曼编码首先需要考虑的是如何表示三元
三元霍夫曼编码需要对不满足2n+3的情况做处理
使用什么数据结构建立霍夫曼树
四、算法思想
1、使用两个二进制位表示一个三元变量,即00表示a、01表示b、11表示c。
2、出现不满足2n+3情况即需要加入一个出现次数为0次的字符,遍历已经出现的字符,找到一种八位二进制组合作为新字符。
3、建立霍夫曼树的算法,使用数组的结构作为整棵树的空间,其中每个数组元素是一个类的实例。
在这各类里封装了他所代表的字符(如果不是叶子节点则为null)、出现的次数(非叶子结点则为子节点的此项加和)。
承载整棵树的数组也是封装在一个类里的,这个类同时封装了对这棵树的操作,如添加节点、树节点排序等,这样就可以使从添加叶子节点后建立整棵霍夫曼树。
模块划分
char huancun[max];//从文件中读入的字符
char yasuohuancun[max];//压缩后可以写进文件中的字符串
long int yasuohuancunnumber=0;//准备写入文件中的个数
long int huancunnumber=0;//从文件中读出字符个数
class tree
{void set(int a,int b,int c,int d,int e)//次数为a,左孩子为b,中孩子为c,右孩子为d,自己的编号e
int mynumber;//次数
int leftsonnumber;//数组编号
int middlesonnumber;
int rightsonnumber;//数组编号 控制时没有儿子节点则儿子都是负数
int myzifunumber;//作为叶子节点在数组中的编号
};
class table//压缩对照表
{
public:table()
void cutrealfile()//将缓存中一样的字符区别开
void uncheck(char huancun)//检查是否出现过字符
bool check(char huancun)//检查源文件字符是否出现过
int checkhuancun(int i)//读缓存数组的字符,返回yasuozifu数组中的地址
void count(tree fun[],int begin,int end)//begin~end区间内排序
char h3setonechar(char n1,char n2,char n3,char n4)//三元霍夫曼给进一个char
位操作使用内联汇编语言 d 是不会被译码的 为了补齐余码
void linshih3manage(char ptr)//进来字符存起来 每四个存一个
void writesign(tree fun[],int permitnumber,char k,int futhernumber)//先给sign的值
递归构建霍夫曼树
void hafuman3()//三元霍夫曼编码函数
void codemanage()//对整个缓存进行编码
bool checkh3code(string ptr)//对解压缩后的码串译码
void jiemah3code(char ptr)//对一个char型8位进行解码为4个char型
void discodemanage()//解压缩程序 使用huancun[]放密文,解压后原文放在yasuohuancun[]中
char linshih3[4];//临时三元霍夫曼
int linshih3number;//记录临时三元霍夫曼个数
int numbe
文档评论(0)