- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈夫曼编码演示
哈夫曼编码与文件压缩 ——1236003 6120610319 杜嘉诚 总体介绍 1 程序介绍 2 关键问题 3 内容 结束感想 4 总体介绍 哈夫曼编码是一种编码方式,经常用于数据压缩。在计算机信息处理中,哈夫曼编码是一种一致性编码法(又称“熵编码法”),用于数据的无损耗压缩。 它的基本原理是建立一张编码表将原字符(例如某文件的一个符号)进行重新编码。它是根据每一个源字符出现的概率而建立起来的,这些字符(如字母)出现的次数越多,其编码的位数就越少。这时的编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。 这种方法是由David.A.Huffman发展起来的,故称为哈夫曼编码。 1 总体介绍 1 可以把哈夫曼编码比作道路优化,原本每个字符占一个char型,也就是8bit,所以所占空间为 V= 8 * 字符数 (bit) 而编码后,频率高的字符可以用少于8bit表示,而频率低的字符则用多余8bit表示,这样所占空间为 V= v1*n1+v2*n2+v3*n3+··· 其中vi代表每个字符所占bit,ni代表字符出现个数,可以证明这样所产生的编码所占空间是最小的 可以证明这样所得的编码所占空间是最小的。 直观的理解上,就好比城市规划。投入更多的资金来改善车流量大的道路,而对车流量小的道路减小投入,这样可使道路资源更充分利用。 在bit的利用上也是如此。 程序介绍 2 压缩程序 思路: 1.读入文件,统计频率,为出现的每一个字符建立节点,并排成一列 2.将节点转化成哈夫曼树 3.利用哈夫曼树产生编码表文件 4.利用编码将源文件转换成二进制编码表示的文本文件 5.将转码后的文本文件压缩成bin文件 a b c 0.1 0.2 0.7 0 0 1 1 产生代码 a: 00 b: 01 c: 1 程序介绍 2 压缩程序 函数: struct tnode* talloc(int symbol, float freq) ——为字符创建节点 void pq_insert(struct tnode* p) ——将节点插入升序排列的队列 struct tnode* pq_pop() ——将队列中第一个(最小频率)节点删除 void generate_code(struct tnode* root, int depth) ——产生编码表 void dump_code(FILE* fp) ——输出编码表 void encode(FILE* fout) ——压缩文件 void getfreq(float freq[]) ——统计字符频率 疑难备注: pq_insert()与pq_pop()两个函数搭配使用,前者用于构建节点队列,方便遍历节点从而找到最小节点。 后者用于建立哈夫曼树,也就是在建立父节点后在队列中删除那两个最小的子节点,以免每次找到同样的两个最小节点。 a b c int main(){ //初始化 struct tnode* p = NULL,* lc, *rc; float freq[255]= {0}; int NCHAR = 255,i = 0; memset(code, 0, sizeof (code)); //统计频率 getfreq(freq); //建立节点队列 for (i = 0; i NCHAR; i++) if(freq[i]0) pq_insert(talloc(i, freq[i])); //建立哈夫曼树(删除子节点创建父节点) while(qhead-next!=NULL) { lc = pq_pop(); rc = pq_pop(); p = talloc(0, lc-freq + rc-freq); lc-parent = rc-parent = p; //建立父子关系 p-right = rc; p-left = lc; p-isleaf = 0; pq_insert(p); } root = pq_pop(); //创建并输出编码表
您可能关注的文档
- 名校创新训练.docx
- 名著阅读之【格雷夫游记】【鲁滨孙漂流记】.ppt
- 名山大川欣赏.ppt
- 同致防盗系统中级认证.ppt
- 名校课件3 反比例函数的应用.ppt
- 名词和主谓一致精品课件.ppt
- 向家坝水电站预留扩机孔检修闸门安装施工方案.doc
- 君康大厦越冬维护方案.doc
- JIT-最先进的生产系统概要.ppt
- 后台架构设计.ppt
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
文档评论(0)