




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上題目:將霍夫曼編碼推廣至三進(jìn)制編碼,并證明它能產(chǎn)生最優(yōu)編碼。將霍夫曼編碼推廣至三進(jìn)制編碼 設(shè)一個(gè)數(shù)據(jù)文件包含Q個(gè)字符:A1,A2,Aq,每個(gè)字符出現(xiàn)的頻度對(duì)應(yīng)為P:P1,P2,Pq。 1.將字符按頻度從大到小順序排列,記此時(shí)的排列為排列1。2.用一個(gè)新的符號(hào)(設(shè)為S1)代替排列1中頻度值最小的Q-2k(k為(Q-1)/2取整)個(gè)字符,并記其頻度值為排列1中最小的Q-2k個(gè)頻度值相加,再重新按頻度從大到小順序排列字符,記為排列2。(注:若Q-2k=0,則取其值為2,若Q-2k=1,則取其值為3.)3.對(duì)排列2重復(fù)上述步驟2,直至最后剩下3個(gè)概率值。4.從最后一個(gè)排列開始
2、編碼,根據(jù)3個(gè)概率大小,分別賦予與3個(gè)字符對(duì)應(yīng)的值:0、1、2,如此得到最后一個(gè)排列3個(gè)頻度的一位編碼。5.此時(shí)的3個(gè)頻度中有一個(gè)頻度是由前一個(gè)排列的3個(gè)相加而來,這3個(gè)頻度就取它的一位編碼后面再延長一位編碼,得到二位編碼,其它不變。6.如此一直往前,直到排列1所有的頻度值都被編碼為止。舉例說明如下(假設(shè)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。構(gòu)造三進(jìn)制霍夫曼編碼偽碼程序如下: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)霍夫曼編碼(三進(jìn)制)最優(yōu)性證明 在二進(jìn)制霍夫曼編碼中,文件的最優(yōu)編碼由一棵滿二叉樹表示,樹中每個(gè)非葉子結(jié)點(diǎn)都有兩個(gè)子結(jié)點(diǎn)。在此與之相對(duì)應(yīng),構(gòu)造一棵滿三叉樹來表示三進(jìn)制的霍夫曼編碼,樹中每個(gè)非葉子結(jié)點(diǎn)都有三個(gè)子結(jié)點(diǎn)。對(duì)文件中A中的每個(gè)字符a,設(shè)f(a)表示a在文件中出現(xiàn)的頻度,dT(a)表示字符a的編碼長度,亦即a的葉子在樹中的深度。這樣,編碼一個(gè)文件所需的位數(shù)就是B(T)=f(a)dT(a)設(shè)A為一給定文件,其中每個(gè)字符都定義有頻度fa。設(shè)x,y和z是A中具有最低
5、頻度的兩個(gè)字符。并設(shè)A'為文件A中移去x,y和z,再加上新的字符s后的文件,亦即A'=A-x,y,zs;如A一樣為A'定義f,其中fs=fx+fy+fz。設(shè)T'為文件A'上最優(yōu)前綴編碼的任意一棵樹,那么,將T'中葉子節(jié)點(diǎn)s換成具有x,y和z孩子的內(nèi)部節(jié)點(diǎn)所得到的樹T,表示文件A上的一個(gè)最優(yōu)前綴編碼。證明:對(duì)每一個(gè)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假設(shè)T不表示A的最優(yōu)前綴編碼,那么存在一棵樹T'',有B(T'')<B(T)。設(shè)T'''是由T''中將x,y和z的父親結(jié)點(diǎn)替換為葉子結(jié)點(diǎn)s而得,其中頻度fs=fx+fy+fz。則有B(T''')=B(T'')-fx-fy-fz<B(T)-fx-fy-fz
7、=B(T')與之前假設(shè)的T'表示A'上的最優(yōu)前綴編碼矛盾,故T必定表示文件A上的最優(yōu)前綴碼,證畢。構(gòu)造三進(jìn)制霍夫曼編碼程序代碼及運(yùn)行結(jié)果如下:程序源碼:#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;/數(shù)據(jù)輸入printf("請(qǐng)輸入字符,按Enter鍵結(jié)束輸入:n");InputChar = getchar(); while(InputChar!=
10、39;n')/*約定一個(gè)結(jié)束符為-1*/ if (InputChar!=' ')characteri_charinput+=InputChar; InputChar = getchar(); printf("請(qǐng)輸入相應(yīng)字符出現(xiàn)的頻率,按0+Enter鍵結(jié)束輸入: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("輸入字符與頻率個(gè)數(shù)不相等,請(qǐng)確認(rèn)后重新輸入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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《癌痛的評(píng)估及護(hù)理》課件
- 農(nóng)業(yè)植保員考試技能要求的試題及答案2024
- 2024年農(nóng)作物種子現(xiàn)場(chǎng)學(xué)習(xí)試題及答案
- 裁判員場(chǎng)上管理人員的協(xié)調(diào)試題及答案
- 2024年農(nóng)作物種子繁育員資格考試題型總結(jié)試題及答案
- 2024年游泳救生員考試的課題試題及答案
- 2024年農(nóng)作物種子檢驗(yàn)流程試題及答案
- 聚焦亮點(diǎn) 2024年體育經(jīng)紀(jì)人試題及答案
- 2025年中國保齡球球道油市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國親水性聚醚改性硅油市場(chǎng)調(diào)查研究報(bào)告
- 第14課 遼宋夏金元時(shí)期的科技與文化 教案2024-2025學(xué)年七年級(jí)歷史下冊(cè)新課標(biāo)
- T-CRHA 089-2024 成人床旁心電監(jiān)測(cè)護(hù)理規(guī)程
- 監(jiān)理實(shí)施細(xì)則模板(信息化、軟件工程)
- 精神疾病治療新靶點(diǎn)-深度研究
- 教學(xué)課件-統(tǒng)計(jì)學(xué)(第三版)袁衛(wèi)
- 醫(yī)院保安員培訓(xùn)
- 教學(xué)設(shè)計(jì)-3.5函數(shù)的最值及其應(yīng)用
- CNAS-CL01:2018 檢測(cè)和校準(zhǔn)實(shí)驗(yàn)室能力認(rèn)可準(zhǔn)則
- 血透室敘事護(hù)理
- 2024-2025學(xué)年湖南省邵陽市新邵縣第二中學(xué)高二上學(xué)期期中考試英語試卷
- 學(xué)習(xí)通《形勢(shì)與政策》2025春章節(jié)測(cè)試答案
評(píng)論
0/150
提交評(píng)論