




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上题目:将霍夫曼编码推广至三进制编码,并证明它能产生最优编码。将霍夫曼编码推广至三进制编码 设一个数据文件包含Q个字符:A1,A2,Aq,每个字符出现的频度对应为P:P1,P2,Pq。 1.将字符按频度从大到小顺序排列,记此时的排列为排列1。2.用一个新的符号(设为S1)代替排列1中频度值最小的Q-2k(k为(Q-1)/2取整)个字符,并记其频度值为排列1中最小的Q-2k个频度值相加,再重新按频度从大到小顺序排列字符,记为排列2。(注:若Q-2k=0,则取其值为2,若Q-2k=1,则取其值为3.)3.对排列2重复上述步骤2,直至最后剩下3个概率值。4.从最后一个排列开始
2、编码,根据3个概率大小,分别赋予与3个字符对应的值:0、1、2,如此得到最后一个排列3个频度的一位编码。5.此时的3个频度中有一个频度是由前一个排列的3个相加而来,这3个频度就取它的一位编码后面再延长一位编码,得到二位编码,其它不变。6.如此一直往前,直到排列1所有的频度值都被编码为止。举例说明如下(假设Q=9):字符A1A2A3A4A5A6A7A8A9频度0.220.180.150.130.100.070.070.050.03字符频度编码频度编码频度编码频度编码A10.2220.2220.3010.480A20.18000.18000.2220.301A30.15020.15010.1800
3、0.222A40.13100.15020.1501A50.10110.13100.1502A60.07120.1011A70.070100.0712A80.05011A90.03012频度中的黑体为前一频度列表中斜体频度相加而得。编码后字符A1A9的码字依次为:2,00,02,10,11,12,010,011,012。构造三进制霍夫曼编码伪码程序如下:HUFFMAN(C)1 n C 2 Q C 3 for i 1 to n-14 do allocate a new node s5 lefts x EXTRACT-MIN(Q)6 middles y EXTRACT-MIN(Q)7 rights
4、z EXTRACT-MIN(Q)8 fs fx+fy+fz9 INSERT(Q,z)10 return EXTRACT-MIN(Q)霍夫曼编码(三进制)最优性证明 在二进制霍夫曼编码中,文件的最优编码由一棵满二叉树表示,树中每个非叶子结点都有两个子结点。在此与之相对应,构造一棵满三叉树来表示三进制的霍夫曼编码,树中每个非叶子结点都有三个子结点。对文件中A中的每个字符a,设f(a)表示a在文件中出现的频度,dT(a)表示字符a的编码长度,亦即a的叶子在树中的深度。这样,编码一个文件所需的位数就是B(T)=f(a)dT(a)设A为一给定文件,其中每个字符都定义有频度fa。设x,y和z是A中具有最低
5、频度的两个字符。并设A'为文件A中移去x,y和z,再加上新的字符s后的文件,亦即A'=A-x,y,zs;如A一样为A'定义f,其中fs=fx+fy+fz。设T'为文件A'上最优前缀编码的任意一棵树,那么,将T'中叶子节点s换成具有x,y和z孩子的内部节点所得到的树T,表示文件A上的一个最优前缀编码。证明:对每一个aA-x,y,z,有dT(a)=dT'(a),故fadT(a)=fadT'(a)。又dT'(x)=dT'(y)=dT'(z)=dT''(s)+1,从而有:fxdT'(x)+f
6、ydT'(y)+fzdT'(z)=(fx+fy+fz)(dT''(s)+1)=fsdT''(s)+(fx+fy+fz)由此可得:B(T)=B(T')+fx+fy+fz假设T不表示A的最优前缀编码,那么存在一棵树T'',有B(T'')<B(T)。设T'''是由T''中将x,y和z的父亲结点替换为叶子结点s而得,其中频度fs=fx+fy+fz。则有B(T''')=B(T'')-fx-fy-fz<B(T)-fx-fy-fz
7、=B(T')与之前假设的T'表示A'上的最优前缀编码矛盾,故T必定表示文件A上的最优前缀码,证毕。构造三进制霍夫曼编码程序代码及运行结果如下:程序源码:#include <stdio.h>#include <string.h>#include <stdlib.h>int Sorting(int *x,int n)/排序int *a,b,i,j,r=0;a=x;for(j=0;j<n;j+)for(i=0;i<n-j-1;i+)if(*(a+i+1)<=(*(a+i)b=*(a+i);*(a+i)=*(a+i+1);*
8、(a+i+1)=b;if(i=r) r+;return r;char *strcatzp(char *str1,const char *str2)/字符串拼接/ASSERT(str1!=NULL)&&(str2!=NULL);char *addr=(char *)malloc(strlen(str1)+strlen(str2)+1)*sizeof(char);char *des=addr;/ASSERT(addr!=NULL);while(*str1)*addr=*str1;str1+;addr+;while(*str2)*addr=*str2;str2+;addr+;*add
9、r='0'return des;void main(void)char character100=""char *code100=""char *temp=NULL;char InputChar;float Input_p;int p100100=0;int count=6,i,j,m,tc=0;int *k;int i_charinput=0,i_pinput=1;/数据输入printf("请输入字符,按Enter键结束输入:n");InputChar = getchar(); while(InputChar!=
10、39;n')/*约定一个结束符为-1*/ if (InputChar!=' ')characteri_charinput+=InputChar; InputChar = getchar(); printf("请输入相应字符出现的频率,按0+Enter键结束输入:n");scanf("%f", &Input_p);while(Input_p!=0) p0i_pinput+= (int)(Input_p* 1000.0+1)/10); scanf("%f", &Input_p); if(i_char
11、input!=(i_pinput-1)printf("输入字符与频率个数不相等,请确认后重新输入n");return;count = i_charinput;k=&p01;for(j=0;j<count;j+)for(i=0;i<count-j-1;i+)if(*(k+i+1)<=(*(k+i)m=*(k+i);*(k+i)=*(k+i+1);*(k+i+1)=m;InputChar=characteri;characteri=characteri+1;characteri+1=InputChar;/for test/*for(i=1;i<1
12、0;i+)printf("%d ",p0i);*/Sorting(&p01,count);if(count%2 != 0)tc=(count-3)/2;for(i=1;i<=tc;i+)pi1=pi-11+pi-12+pi-13;for(j=2;j<count-2*i+1;j+)pij=pi-1j+2;pi0=1+Sorting(&pi1,count-2*i);code0="2"code1="1"code2="0"for(i=tc;i>0;i-)temp=codepi0-1;for
13、(j=count-2*i-1;j>=0;j-)if(j>pi0-1)codej+2=codej;else if(j<pi0-1)codej+3=codej;code0=strcatzp(temp,"2");code1=strcatzp(temp,"1");code2=strcatzp(temp,"0");printf("字符编码为:n");for(i=0;i<count;i+)printf("%c->%sn",characteri,codei);printf(&qu
14、ot;n");/for test/*for(i=0;i<(count-1)/2;i+)for(j=0;j<1+count-2*i;j+)printf("%d ",pij);printf("n");*/elsetc=(count+2)/2;for(i=1;i<=tc;i+)pi1=pi-11+pi-12;for(j=2;j<count-i+1;j+)pij=pi-1j+1;pi0=1+Sorting(&pi1,count-i);code0="2"code1="1"code2="0"for(i=tc;i>0;i-)temp=codepi0-1;for(j=count-i-1;j>=0;j-)if(j>pi0-1)codej+1=codej;else if(j<pi0-1)codej+2=codej;code0=strcatzp(temp,"1");code1=strcatzp(temp,"0");pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《皮肤烫伤护理指南》课件
- 《设备保养与维护教程》课件
- 《微波炉的奇妙用途》课件
- (13)-考点13 近义词辨析(一)
- 精湛技艺课件:探索工匠精神的内涵与价值
- 三年级道德与法治下册 第二单元 我在这里长大 7请到我的家乡来教学设计2 新人教版
- 九年级道德与法治上册 第二单元 行动的指南 第五课“三个代表”重要思想教学设计 教科版
- 西安美术学院《神经药理学》2023-2024学年第一学期期末试卷
- 江西生物科技职业学院《中国文化与文学精粹》2023-2024学年第一学期期末试卷
- 铁门关职业技术学院《媒介集团研究》2023-2024学年第二学期期末试卷
- 2025年春季学期形势与政策第二讲-中国经济行稳致远讲稿
- 2022版义务教育(道德与法治)课程标准(附课标解读)
- GB/T 19923-2024城市污水再生利用工业用水水质
- 成都高新区小学数学五年级下册半期考试数学试卷
- 2018年人教版九年级英语单词表
- 危险性较大分部分项工程及施工现场易发生重大事故的部位环节的预防监控措施和应急预案11汇编
- 血液透析患者心力衰竭护理查房ppt
- 苹果中国授权经销商协议
- 昆山市工业用地项目监管协议-苏州市国有建设用地使用权网上出让系统
- 混凝土裂缝修补工程验收记录表
- ECOLAB 虫害培训资料PPT精品文档
评论
0/150
提交评论