ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:782.48KB ,
资源ID:17192075      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17192075.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息论实习报告Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

信息论实习报告Word文件下载.docx

1、 low = Low; high = Low + chancej * d; High = high; d *= chancej; else double chance_l = 0.0; for(int k = 0;k 1) cout 1; Low -= 1; else cout0;7.3程序运行结果输入信源符号及对应的概率分布:输入符号序列:得到相应的结果:该数据来源为课件。7.4、程序分析在网上下的程序并未对码长以及最终编码进行计算和输出,根据可见所讲,将信息熵求出后计算了码长,并输出了最后的编码结果。重新认识了算术编码的编码过程,对于解码部分,并未做相应的编程实现。但是了解了其解码过程,虽

2、然对能否无损解码持怀疑态度。八、源代码#include using namespace std;math.h#define M 100#define N 4class suanshu int count,length; char numberN,n; long double chanceN,c; char codeM; long double High,Low,high,low,d;public: suanshu() High=0;Low=0; void get_number(); void get_code(); void coding(); void print(); suanshu();

3、void suanshu:get_number() cout输入信源符号及其对应概率:endl; int i; long double sum = 0.00; for(i = 0; N & sum n c; numberi = n; chancei = c; sum += c; if(i = 20) cout概率和超过. count = i;get_code()输入符号序列长:; cinlength; while(length=M)输入的符号序列超长,请改小! cin for(int i=0;ii+) codei;coding() int i,j=0; for(i=0;count; if(co

4、de0=numberi) break; while(ji) Low += chancej+; d = chancej; High = Low + d; print()算数编码结果为:Low二进制结果: double sum = 1.00; for (int i = 0; for(int i = 0;void main() suanshu a; a.get_number(); a.get_code(); a.coding(); a.print();实验四 Huffman编码对英文文本的压缩和解压缩一、实验内容根据信源压缩编码Huffman编码的原理,制作对英文文本进行压缩和解压缩的软件。要求软件

5、有简单的用户界面,软件能够对运行的状态生成报告,分别是:字符频率统计报告、编码报告、压缩程度信息报告、码表存储空间报告。4. 计算机5. Windows 2000 或以上6. Microsoft Office 2000 或以上7. VS20053. 掌握Huffman编码的原理4. 掌握VC开发环境的使用(尤其是程序调试技巧)5. 掌握C语言编程(尤其是位运算和文件的操作)6. 掌握数据结构的内容:链表、顺序表、堆栈、最优二叉树7. 掌握结构化程序分析和开发的软件工程原理4. 提前预习实验,认真阅读实验原理。5. 认真高效的完成实验,实验过程中服从实验室管理人员以及实验指导老师的管理。6. 认

6、真填写实验报告。压缩/解压缩流程压缩流程:读取扫描文本文件统计字符频率生成码字保存压缩文件解压缩流程:读取扫描压缩文件提取字符频率生成码树保存文本文件2. 信息论基础理论及应用傅祖芸,电子工业出版社3. 数据结构,清华大学出版社7.1数据结构描述: 以下是哈夫曼树结点的结构:/哈夫曼树结点结构体实现typedef struct talNode unsigned char c; /叶结点时对应ASCII值 int weight; /该结点权值 int lt,rt; /左、右结点下标 talNode() talNode(unsigned char _c,int _p): c(_c),weight(

7、_p),lt(-1),rt(-1) talNode(unsigned char _c,int _p,int l,int r) :c(_c),weight(_p),lt(l),rt(r) bool operator (talNode a) /重载运算符“”用于二叉堆内的比较 return weighta.weight;HuffNode; 哈夫曼树以数组形式保存,其元素个数是2n-1,其中n为叶子数。对应结点的哈夫曼编码用一个数组记录,该数组元素是指向字符的指针 7.2主要算法描述7.2.1压缩其基本实现方法是,因为英文文件中都是ACSII码(包括英文的标点符号),所以对选定的文件文本读入,一次读

8、入一个字符,然后对每个ASCII字符进行统计,如此循换,这就统计出文件的每个字符的权值了。得出文件各字节的权值后,就可以构造对应哈夫曼的哈夫曼树,从而就可以构造出对应字符的哈夫曼编码了。每个字符的哈夫曼编码都知道了,那么文件的哈夫曼编码就可以求出了。7.2.2关于解压解压时,先读出哈夫曼编码的节点及其权值,然后对编码部分读取一个字节(8 bit)用一个函数转换为8个字符(用一个数组记录,其元素只是一个0或一个1),然后按哈夫曼树从顶向下查找,如果到达叶子结点,就读出该叶子结点的值,放入缓冲区中,如果不是,则继续找,如此重复,直到缓冲区满了,就写入到解压文件中,再循环以上过程,直到处理完所有数据

9、。7.3具体函数设计7.3.1压缩函数设计点击压缩后,调用压缩函数EnCodeFile()SaveHuffHead(fpt); /写入压缩文件的头信息!注意,此时lastcodelenth为空,需压缩结束时重置 l=data=0; puts(Encoding . ); /编码压缩过程,依次对源文件字符进行编码 while(true) /存入一个字符中,用移位操作实现,每位前 c=fgetc(fp); /缀码对应一个字符,将该字符存入目标文件, if(feof(fp) break; /最终不足位的记录最后一位占用的前缀码长度 soucelen+; /源文件长度增加 for(i=0;lenthc;

10、i+) /对data进行左移,空出最低位 data=1; /对当前字符的前缀码当前们存储于data中 data+=codeci; if(+l%8=0) /满位,则存储 fputc(data,fpt); targetlen+; /目标文件长度增加 /对最后的一个字符进行处理 lastcodelenth=l%8; /记录实际占用位的长度 data=l;i-) /按位取出前缀码 tmpi=c&1;c l+=8; while(l=32) /如果当前前缀码段超出一定的长度,则取出前缀码进行解码 for(i=0,cur=arrsize-1;cur.c; cur=tmpi?arrcur.rt:arrcur.

11、lt;/找到前缀码段对应第一个字符 fprintf(fpt,cur.c); /输出至目标文件 l-=i;targetlen+; /前缀码段减去当前字符前缀码长度 memmove(tmp,tmp+i,sizeof(bool)*l); /数组顺移至开头,即从开始记录当前的前缀码段 c=t; for(i=l+7;i-) /对最后一个字符做特殊处理 tmpi=c& /取出每一位 c l+=lastcodelenth; /只利用最后一个字符的前lastcodelenth位 while(l) /输出剩余的前缀码段对应的字符 for(i=0,cur=arrsize-1; cur=tmpi? fprintf(

12、fpt,l-=i; memmove(tmp,tmp+i,sizeof(bool)*l); fclose(fp);fclose(fpt); /关闭文件7.4程序体验7.4.1程序界面:7.4.2选择文件并压缩:源文件“test.txt”的内容选取文件压缩完成选择的源文件为:“D:我的文档test.txt”压缩后的文件存储在相同路径下,压缩后的文件名:“test.huf”,文件长度减小了7908。其内容为下:压缩后的内容7.4.3解压选择刚才的压缩文件进行解压:解压成功 解压后的文件名为:“test.txt”解压后的文件内容经过压缩解压后得到的文件内容和压缩前的一致。利用MD5比较,得到压缩前文件

13、与解压得到的文件为同一文件。DE01E3358BCA716ACB444661E862CBDDHuffman.h:#pragma once/*/课程:信息论与编码/题目:霍夫曼编码实现文本压缩解压/老师:余林琛/作者:刘宇豪/时间:-11-2#include#include stdafx.h#define ASCIIL 256#define F(x) (x-1)1)#define L(x) (x1)+1)#define R(x) (x1)+2)#define SWAP(a,b,tmp) tmp=a;a=b;b=tmp;/实现二叉堆模板类,小顶堆template class CHeap HeapT

14、ype *data,tmp; int size; void HeapUp(int ix) /自底向顶维护堆 int f; for(f=F(ix);ix&dataix=size) return ; l=L(ix),r=R(ix); min=dataix,t=ix; if(lsize&datalmin) t=l,min=datal; if(rdatar t=r,min=datal; SWAP(dataix,datat,tmp); if(ix!=t) HeapDown(t); CHeap() /这里特殊应用,堆内元素个数不超过 size=0; data=new HeapType256; CHeap(

15、) /释放内存 delete data; int getsize() /返回堆大小 return size; void clear() /清空堆 void insert(HeapType e) /向堆尾中插入元素,并向顶维护堆 datasize+=e; HeapUp(size-1); HeapType top() /从堆顶取出元素,并向底维护堆 HeapType ret=data0; data0=data-size; HeapDown(0);return ret;class CHuffMan HuffNode arr512; /哈夫曼树结点数组 /哈夫曼树结点个数 bool code25664

16、; /ASCII对应编码方案 int lenth256; /ASCII对应编码长度 /lastcodelenth,ps256,用于存储压缩文件中作为文件头 int lastcodelenth; /文件最后一个字符实用几位 int ps256; /ASCII对应出现频率 int soucelen,targetlen; /源及目标文件长度 /私有成员函数,用于实现内部功能 void SetHuffTree(int ); /根据字符频率生成哈夫曼树 void SetHuffCode(int ,bool ,int );/根据哈夫曼树生成编码方案 void CreateHuff(int ); /创建哈夫

17、曼树及编码方案 void EnCodePre(CString); /压缩前预处理 void DeCodePre(FILE *); /解压前预处理 void SaveHuffHead(FILE *); /保存压缩文件头 void ReadHuffHead(FILE *); /读取压缩文件头 CHuffMan()Clear(); /构造函数 CHuffMan() /析构函数 /公有成员函数,用于提供使用接口 void Clear(); /清空当前对象内容 void EnCodeFile(CString,CString); /编码,用于压缩文件,第一个参数为源文件名,第二个参数为目标文件名 void DeCodeFile(CString,CString); /解码

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1