武汉理工大学数据结构与算法综合实验哈夫曼树 (1)(9页).doc
《武汉理工大学数据结构与算法综合实验哈夫曼树 (1)(9页).doc》由会员分享,可在线阅读,更多相关《武汉理工大学数据结构与算法综合实验哈夫曼树 (1)(9页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-学生学号 Xxx实验课成绩学 生 实 验 报 告 书实验课程名称数据结构与算法综合实验开课学院计算机科学与技术学院指导教师姓名xxx学生姓名xxx学生专业班级xxxx2015-2016学年第2学期-第 8 页-实验课程名称: 数据结构与算法综合实验 实验项目名称二叉树与赫夫曼图片压缩报告成绩实验者xx专业班级xxx组别同组者 完成日期2016年5月2日第一部分:实验分析与设计(可加页)一、 实验目的和要求1.目的 = 掌握树的存储结构 = 掌握二叉树的三种遍历方法 = 掌握 Huffman 树、Huffman 编码等知识和应用 = 使用 C+、文件操作和 Huffman 算法实现“图片压缩程
2、序”专题编程。2.要求=针对一幅 BMP 格式的图片文件,统计 256 种不同字节的重复次数,以每 种字节重复次数作为权值,构造一颗有 256 个叶子节点的哈夫曼二叉树。 =利用上述哈夫曼树产生的哈夫曼编码对图片文件进行压缩。=压缩后的文件与原图片文件同名,加上后缀.huf(保留原后缀),如 pic.bmp 压缩后 pic.bmp.huf二、 分析与设计依据上述的实验目的与要求,可导出实现的二叉树与赫夫曼图片压缩软件的流程为: 读取图片文件、统计权值 生成 Huffman 树 生成 Huffman 编码 压缩图片文件 保存压缩的文件1. 数据结构的设计l 记录统计256种不同字节的重复次数使用
3、整型数组。 int weight256 = 0 ;l 二叉树的存储结构。使用结构体存储节点,使用数组存储树的节点,使用静态二叉链表方式存储二叉树。l Huffman编码存储结构 struct HTNodeint weight;/权值int parent;int lchild;int rchild;char zifu;string bianma;l 压缩文件的算法的数据结构 为正确解压文件,除了要保存原文件长度外,还要保存原文件中256种字节重复的次数,即权值。定义一个文件头,保存相关的信息: struct HEADchar type4;int length;int weight256;压缩文件
4、时,定义一个内存缓冲区: typedef char * pBuffer; /其大小视原文件压缩后的大小2.核心算法设计(1)生成Huffman树和Huffman编码的算法void Select(HTNode huffTree,int m)int min,min2,i;min=min2=1000;for(i=0;ihuffTreei.weight )min2=min;min=huffTreei.weight ;x2=x1;x1=i;else if(min2huffTreei.weight )min2=huffTreei.weight ;x2=i;void creatHuffman(int huf
5、f)int i;int s=256;for(i=0;i2*s-1;i+)HuffmanTreei.parent =-1;HuffmanTreei.lchild =-1;HuffmanTreei.rchild =-1;for(int i1=0;i1s;i1+)HuffmanTreei1.weight=huffi1;for(int k=s;kn-1;i-)huffTreehuffTreei.lchild .bianma =0;huffTreehuffTreei.rchild .bianma =1;for(i=0,j=0;jn;j+)while(huffTreei.parent !=-1)huffT
6、reej.bianma =huffTreehuffTreei.parent.bianma +huffTreej.bianma ;i=huffTreei.parent ;i=j+1;(2)压缩编码算法struct HEADchar type4;int length;int weight256;char Str2byte(const char * pBinStr)char b=0x00;for(int i=0;i8;i+)b=b1;if(pBinStri=1)b=b|0x01;return b;bool InitHead(const char *pFilename,HEAD &sHead)char
7、 ch;/初始化文件strcpy(sHead.type,HUF);sHead.length=0;for(int i=0;i256;i+)sHead.weighti=0;ifstream in;in.open(pFilename,ios:binary);while(in.get(ch) sHead.weight(unsigned char)ch+;sHead.length+; coutsHead.length字节endl;return true;int Encode(const char *pFilename,char * &pBuffer,const int nSize) pBuffer=(c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工大学数据结构与算法综合实验哈夫曼树 19页 武汉理工大学 数据结构 算法 综合 实验 哈夫曼树
限制150内