版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、答 辯 人張紹歡、鄒孟雷、巫安電 文 的 編 碼 與 譯 碼電 文 的 編 碼 與 譯 碼目錄目錄1.設(shè)計(jì)要求2.概念設(shè)計(jì)3.詳細(xì)設(shè)計(jì)4.調(diào)試運(yùn)行摘要摘要摘要在當(dāng)今信息爆炸時(shí)代,如何采用有效的數(shù)據(jù)壓縮技術(shù)節(jié)省數(shù)據(jù)文件的存儲(chǔ)空間和計(jì)算機(jī)網(wǎng)絡(luò)的傳送時(shí)間已越來越引起人們的重視,結(jié)合時(shí)間、空間復(fù)雜度綜合考慮,哈夫曼編碼哈夫曼編碼正是一種應(yīng)用廣泛且非常正是一種應(yīng)用廣泛且非常有效的數(shù)據(jù)壓縮技術(shù)。有效的數(shù)據(jù)壓縮技術(shù)。哈夫曼編碼是一種編碼方式,以哈夫曼樹即最優(yōu)二叉樹,帶權(quán)路徑長(zhǎng)度(WPL)最小的二叉樹,經(jīng)常應(yīng)用于數(shù)據(jù)壓縮。哈夫曼編碼使用一張?zhí)厥獾木幋a表將源字符(例如某文件中的一個(gè)符號(hào))進(jìn)行編碼。電文的編碼與譯
2、碼設(shè)計(jì)要求設(shè)計(jì)要求功能需求我們項(xiàng)目所需要實(shí)現(xiàn)的功能主要有:1.從鍵盤接受一串帶有權(quán)值的節(jié)點(diǎn),輸出相應(yīng)的哈夫曼編。2.能夠翻譯由哈夫曼編碼生成的代碼串,輸出相對(duì)應(yīng)的電文字符。第一步:第一步:選最小兩個(gè)數(shù)合選最小兩個(gè)數(shù)合并出一個(gè)樹,得到這兩個(gè)并出一個(gè)樹,得到這兩個(gè)數(shù)的權(quán)值之和作為其父節(jié)數(shù)的權(quán)值之和作為其父節(jié)點(diǎn)。點(diǎn)。第二步:重復(fù)第一步,直第二步:重復(fù)第一步,直到構(gòu)造哈夫曼樹完成。到構(gòu)造哈夫曼樹完成。1.1.構(gòu)造哈夫曼樹構(gòu)造哈夫曼樹根據(jù)已經(jīng)構(gòu)造完成的哈夫曼樹,根據(jù)已經(jīng)構(gòu)造完成的哈夫曼樹,規(guī)定左分之代表規(guī)定左分之代表0 0,右分支代,右分支代表表1 1。所以可以分別得到節(jié)點(diǎn)。所以可以分別得到節(jié)點(diǎn)值的編碼
3、,且該編碼是唯一的。值的編碼,且該編碼是唯一的。2.2.生成編碼生成編碼根據(jù)已經(jīng)生成的編碼,一根據(jù)已經(jīng)生成的編碼,一一匹配編碼值,即可實(shí)現(xiàn)一匹配編碼值,即可實(shí)現(xiàn)譯碼。譯碼。3.3.電文譯碼電文譯碼實(shí)現(xiàn)原理5A2B4C7D8E1F9G3712152136編碼:編碼:A:110 B:0001 C:001 D:111 E:01 F:0000 G:10 節(jié)點(diǎn)值節(jié)點(diǎn)值權(quán)值權(quán)值電文編碼電文編碼編碼表:編碼表:A:110 B:0001 C:001 D:111 E:01 F:0000 G:10 電文譯碼110 111 01001 0001 01 01 001 10 111 01 0001所以可知電文所以可知電
4、文110111010010001010100110111010001所得到的譯碼為:所得到的譯碼為:ADECBEECGDEB詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)2 . 創(chuàng) 建 哈 弗 曼 樹3 . 編 碼4 . 譯 碼1 . 字 符 統(tǒng) 計(jì)5 . 主 函 數(shù)定義數(shù)據(jù)結(jié)構(gòu)#include#include #include typedef char DataType; /DataType可看做可看做char#define MAXNUM 50typedef struct/定義結(jié)構(gòu)體定義結(jié)構(gòu)體 DataType data;/字符表示數(shù)據(jù)字符表示數(shù)據(jù) int weight,parent,left,right;HuffNod
5、e;typedef struct/定義編碼的儲(chǔ)存結(jié)構(gòu)定義編碼的儲(chǔ)存結(jié)構(gòu) DataType cdMAXNUM;/存放編碼位串存放編碼位串 int start;HuffCode;dataweightparentleftright創(chuàng)建哈夫曼樹/創(chuàng)建哈夫曼樹 int HuffmanCreate(HuffNode *ht) /?int i,k,n,m1,m2,p1,p2;printf(請(qǐng)輸入元素個(gè)數(shù): );scanf(%d,&n);for( i=1;int 節(jié)點(diǎn)值:,i);scanf(%c,&hti.data);printf(t 權(quán) 重: );scanf(%d,&hti.weight);第一步:森林共有
6、n個(gè)樹,將兩棵根結(jié)點(diǎn)權(quán)值最小的樹,合并成新的樹;每合并一次,將產(chǎn)生一個(gè)新結(jié)點(diǎn)。顯然要進(jìn)行n1次合并,所以共產(chǎn)生n1個(gè)新結(jié)點(diǎn),它們都是具有兩個(gè)孩子的分支結(jié)點(diǎn)。由此可知,最終求得的哈夫曼樹中一共有2n1個(gè)結(jié)點(diǎn),其中n個(gè)結(jié)點(diǎn)是初始森林的n個(gè)孤立結(jié)點(diǎn)。并且哈夫曼樹中沒有度數(shù)為1的分支結(jié)點(diǎn)。我們可以利用一個(gè)大小為2n-1的一維數(shù)組來存儲(chǔ)赫夫曼樹中的結(jié)點(diǎn)。 for (i=n;i2*n-1;i+) /構(gòu)造哈夫曼樹構(gòu)造哈夫曼樹 min1=min2=MAX; / lnode=rnode=0; /lnode和和rnode記錄最小權(quán)值的兩個(gè)結(jié)點(diǎn)位置記錄最小權(quán)值的兩個(gè)結(jié)點(diǎn)位置 for (k=0;k=i-1;k+) /
7、選出每次外層循環(huán)最小權(quán)值的兩個(gè)結(jié)點(diǎn)選出每次外層循環(huán)最小權(quán)值的兩個(gè)結(jié)點(diǎn) if (htk.parent=0) /只在尚未構(gòu)造二叉樹的結(jié)點(diǎn)中查找只在尚未構(gòu)造二叉樹的結(jié)點(diǎn)中查找 if (htk.weightmin1) /比比min1小時(shí)小時(shí) min2=min1;rnode=lnode; min1=htk.weight;lnode=k; else if (htk.weightmin2) /比比min1大,比大,比min2小小 min2=htk.weight;rnode=k; htlnode.parent=i;htrnode.parent=i; /兩個(gè)最小節(jié)點(diǎn)的父節(jié)點(diǎn)是兩個(gè)最小節(jié)點(diǎn)的父節(jié)點(diǎn)是i hti.w
8、eight=htlnode.weight+htrnode.weight; /兩個(gè)最小節(jié)點(diǎn)的父節(jié)點(diǎn)權(quán)值為兩個(gè)最小節(jié)點(diǎn)權(quán)值之兩個(gè)最小節(jié)點(diǎn)的父節(jié)點(diǎn)權(quán)值為兩個(gè)最小節(jié)點(diǎn)權(quán)值之和和 hti.lchild=lnode;hti.rchild=rnode; /父節(jié)點(diǎn)的左節(jié)點(diǎn)和右節(jié)點(diǎn)父節(jié)點(diǎn)的左節(jié)點(diǎn)和右節(jié)點(diǎn) 編碼void Encoding(HuffNode ht,HuffCode hcd,int n) HuffCode d; int i,k,f,c; for (i=1;i=n;i+)/對(duì)構(gòu)造的哈夫曼樹的所有節(jié)點(diǎn)循環(huán)對(duì)構(gòu)造的哈夫曼樹的所有節(jié)點(diǎn)循環(huán) d.start=n+1; c=i; f=hti.parent; whi
9、le(f !=0) if(htf.left=c) d.cd-d.start=0; else d.cd-d.start=1; c=f; f=htf.parent; hcdi=d; printf(輸出哈弗曼編碼:輸出哈弗曼編碼:n); for(i=1;i=n;i+) printf(%c:,hti.data); for(k=hcdi.start;k=n;k+) printf(%c,hcdi.cdk);printf(n);譯碼void Decoding(HuffNode ht,HuffCode hcd,int n)int f,m,k;DataType c,ch200;/ch數(shù)組存儲(chǔ)接收到的電文數(shù)組存儲(chǔ)
10、接收到的電文 printf(請(qǐng)輸入電文請(qǐng)輸入電文(0或或1),以),以#結(jié)束:結(jié)束: n);c=getchar();/ k=1;while(c!=#)chk=c;c=getchar();k=k+1;m=k;f=2*n-1;k=1;printf(輸出哈弗曼譯碼:輸出哈弗曼譯碼: n);while(km)while (htf.left !=0)if(chk=0) f=htf.left;if(chk=1)f=htf.right;k+;printf(%c,htf.data);f = 2*n - 1;printf(n); 主函數(shù)int main(int argc,char *argv) int n,select,flag=0; HuffNode ht2*MAXNUM;/? HuffCode hcdMAXNUM;/? while(1) printf(t 請(qǐng)選擇功能(輸入請(qǐng)選擇功能(輸入1-4數(shù)字)數(shù)字)n); printf(t1 建立哈弗曼樹建立哈弗曼樹n); printf(t2 編碼編碼n); printf(t3 譯碼譯碼n); printf(t4 退出退出n);scanf(%d,&select);if(select!=1&select!=4&flag=0)printf(請(qǐng)先建立哈弗曼樹請(qǐng)先建立哈弗曼樹n);continue; f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 存量住房回購(gòu)協(xié)議
- 信用卡分期付款協(xié)議
- 國(guó)內(nèi)沿海集裝箱貨運(yùn)代理合作條款
- 廣告公司拍攝合同
- 2024年房屋買賣合同協(xié)議書樣本
- 2024年圖文廣告設(shè)計(jì)制作合同
- 學(xué)生貸款合同格式
- 石油化工工程承攬合同
- 保潔服務(wù)合同范文全書
- 蘇教版小學(xué)數(shù)學(xué)三年級(jí)下冊(cè)《認(rèn)識(shí)幾分之一》公開課課件
- 江蘇省泰興市2024-2025學(xué)年高三上學(xué)期期中考試語(yǔ)文試題(含答案)
- 家長(zhǎng)會(huì)教學(xué)課件
- 安徽省亳州市黌學(xué)英才中學(xué)2024-2025學(xué)年七年級(jí)上學(xué)期期中生物學(xué)試題(含答案)
- 期中綜合檢測(cè)(1-4單元)(試題)- 2024-2025學(xué)年二年級(jí)上冊(cè)數(shù)學(xué)人教版
- 2024-2030年全球及中國(guó)IT服務(wù)管理(ITSM)軟件行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 滬粵版初中物理八上八年級(jí)上學(xué)期物理期中試卷(解析版)
- 江蘇省蘇州市蘇州工業(yè)園區(qū)蘇州工業(yè)園區(qū)景城學(xué)校2023-2024學(xué)年八年級(jí)上學(xué)期期中數(shù)學(xué)試題(解析版)
- 私募基金管理公司薪酬與激勵(lì)約束制度
- 2024年消防宣傳月知識(shí)競(jìng)賽考試題庫(kù)500題(含答案)
- 2024年下半年事業(yè)單位公開考試招聘工作人員報(bào)考信息表
- 國(guó)開2024年秋《機(jī)電控制工程基礎(chǔ)》形考任務(wù)1答案
評(píng)論
0/150
提交評(píng)論