




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 目錄一:實(shí)驗(yàn)原理 -1二:程序源代碼-1三:實(shí)驗(yàn)分析-6四: 實(shí)驗(yàn)結(jié)論-7 赫夫曼編碼一:實(shí)驗(yàn)原理哈夫曼編碼的具體步驟歸納如下: 概率統(tǒng)計(jì)(如對(duì)一幅圖像,或m幅同種類型圖像作灰度信號(hào)統(tǒng)計(jì)),得到n個(gè)不同概率的信息符號(hào)。 將n個(gè)信源信息符號(hào)的n個(gè)概率,按概率大小排序。 將n個(gè)概率中,最后兩個(gè)小概率相加,這時(shí)概率個(gè)數(shù)減為n-1個(gè)。 將n-1個(gè)概率,按大小重新排序。 重復(fù),將新排序后的最后兩個(gè)小概率再相加,相加和與其余概率再排序。 如此反復(fù)重復(fù)n-2次,得到只剩兩個(gè)概率序列。 以二進(jìn)制碼元(0.1)賦值,構(gòu)成哈夫曼碼字。編碼結(jié)束。 哈夫曼碼字長度和信息符號(hào)出現(xiàn)概率大小次序
2、正好相反,即大概信息符號(hào)分配碼字長度短,小概率信息符號(hào)分配碼字長度長。C、哈夫曼編碼的特點(diǎn)(1)哈夫曼編碼的構(gòu)造順序明確,但碼不是唯一的(因以大賦1還是小的賦1而異; (2) 哈夫曼編碼的字長參差不齊,硬件實(shí)現(xiàn)不方便;(3)只有在概率分布很不均勻時(shí),哈夫曼編碼才有顯著的效果,而在信源分布均勻時(shí),一般不使用哈夫曼編碼。二:程序源代碼:#define MAXVALUE 10000#define MAXLEAF 30#define MAXNODE 59#define MAXBIT 10#define LENTH 30#include stdio.h#includetypedef struct flo
3、at gailv; int flag; int parent; int lchild; int rchild; char ch; int t; HNodeType;typedef struct int bitMAXBIT; int start; HCodeType;typedef struct float gailv; char letter; mytype; /*its the type of data save in file*/typedef struct filehuff int count; mytype mydataMAXLEAF; filehuff()count=0; ; fil
4、ehuff filedata; char codeMAXVALUE; HNodeType HuffNodeMAXNODE;void savetofile() FILE *fp; if(fp=fopen(datafile.txt,wb)=NULL) printf(打開失敗 .); return; if(fwrite(&filedata,sizeof(filedata),1,fp)!=1) printf(寫入文件失敗 .); fclose(fp);void openfile() FILE *fp; if(fp=fopen(datafile.txt,rb)=NULL) return; fread(&
5、filedata,sizeof(filedata),1,fp);void translate() char c; int i,j,k=0,m,n=0; printf(請(qǐng)輸入你想要譯碼的二進(jìn)制序列 ); printf(n);getchar(); scanf(%c,&c); for(i=0;(iMAXVALUE)&(c=1|c=0);i+) codei=c; scanf(%c,&c); printf(對(duì)應(yīng)的信源符號(hào)為:); for(j=0;j=MAXVALUE&HuffNodej.parent!=-1;j+) m=j+1; for(j=0,k=m;j=i;j+) if(codej=0) n=Huf
6、fNodek.lchild; if(n=-1) printf(%c,HuffNodek.ch); k=m;j-;continue; k=n; else n=HuffNodek.rchild; if(n=-1) printf(%c,HuffNodek.ch); k=m;j-;continue; k=n; void Huffman() HCodeType HuffCodeMAXLEAF,cd; int i,j,m1,m2,x1,x2,c,p,m; if(filedata.count=0) printf(n輸入信源符號(hào)總數(shù) : ); scanf(%d,&m);filedata.count=m; fo
7、r(i=0;i2*m-1;i+) HuffNodei.gailv=0;HuffNodei.parent=-1;HuffNodei.flag=0;HuffNodei.lchild=-1;HuffNodei.rchild=-1;HuffNodei.ch=a; for(i=0;im;i+) printf(請(qǐng)輸入 (概率,信源符號(hào)):);scanf(%f %c,&HuffNodei.gailv,&HuffNodei.ch); filedata.mydatai.gailv=HuffNodei.gailv; filedata.mydatai.letter=HuffNodei.ch; savetofile(
8、); else m=filedata.count; for(i=0;i2*m-1;i+) HuffNodei.gailv=0; HuffNodei.parent=-1; HuffNodei.flag=0; HuffNodei.lchild=-1; HuffNodei.rchild=-1; HuffNodei.ch=3; for(i=0;im;i+) HuffNodei.gailv=filedata.mydatai.gailv; HuffNodei.ch=filedata.mydatai.letter; for(i=0;im-1;i+) m1=m2=MAXVALUE; x1=x2=0; for(
9、j=0;jm+i;j+) if(HuffNodej.gailvm1&HuffNodej.flag=0) m2=m1; x2=x1; m1=HuffNodej.gailv; x1=j; else if(HuffNodej.gailvm2&HuffNodej.flag=0) m2=HuffNodej.gailv; x2=j; HuffNodex1.parent=m+i; HuffNodex2.parent=m+i; HuffNodex1.flag=1; HuffNodex2.flag=1; HuffNodem+i.gailv=HuffNodex1.gailv+HuffNodex2.gailv; H
10、uffNodem+i.lchild=x1; HuffNodem+i.rchild=x2; for(i=0;im;i+) cd.start=m-1; c=i; p=HuffNodec.parent; while(p!=-1) if(HuffNodep.lchild=c)cd.bitcd.start=0; else cd.bitcd.start=1; cd.start-; c=p; p=HuffNodec.parent; for(j=cd.start+1;jm;j+)HuffCodei.bitj=cd.bitj; HuffCodei.start=cd.start; printf(對(duì)應(yīng)的赫夫曼編碼如
11、下:); printf(n信源符號(hào) 概率 編碼n); for(i=0;im;i+) printf(%c %f ,HuffNodei.ch,HuffNodei.gailv); for(j=HuffCodei.start+1;jm;j+) printf(%d,HuffCodei.bitj); printf(n); printf(按任意鍵繼續(xù).n); main() char yn;printf(n);printf(n);printf( 信息論與編碼實(shí)驗(yàn) n); openfile(); Huffman(); for(;) printf(n是否想要把序列譯碼為信源符號(hào) ?: (輸入 y or n) );
12、 scanf(%c,&yn); if(yn=y|yn=Y) translate(); else break; return 0; system(pause);三:實(shí)驗(yàn)分析編碼實(shí)例如下:由圖中可以看出,符合基本的赫夫曼編碼的原理,概率大的用短碼,概率小的用長碼。選擇譯碼:結(jié)果如下: 四: 實(shí)驗(yàn)結(jié)論哈夫曼的具體實(shí)現(xiàn),在數(shù)據(jù)結(jié)構(gòu)的相關(guān)課程曾做相應(yīng)的實(shí)驗(yàn),所以無論在理解上或是實(shí)現(xiàn)上,都不是很困難,程序上實(shí)現(xiàn)哈夫曼的編碼與譯碼,由于哈夫曼自身的特點(diǎn),編碼與譯碼均不是唯一,但是相同的編譯碼規(guī)則還是能實(shí)現(xiàn)正確的譯碼的。本實(shí)驗(yàn),除了實(shí)現(xiàn)編譯碼的具體實(shí)現(xiàn),還實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與讀取,這給實(shí)驗(yàn)實(shí)現(xiàn)方便,不必每次從命令提示符輸入數(shù)據(jù)??偟膩碚f,通過本次實(shí)驗(yàn),對(duì)哈夫曼的編譯碼有了一個(gè)更好的認(rèn)識(shí)。通過本次試驗(yàn),對(duì)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 理論應(yīng)用審計(jì)師試題及答案解析
- 以辦公室為中心解析區(qū)塊鏈如何簡(jiǎn)化農(nóng)產(chǎn)品溯源流程
- 消防安全基礎(chǔ)知識(shí)試題及答案
- 醫(yī)療團(tuán)隊(duì)在醫(yī)學(xué)研究中的作用
- 醫(yī)療信息共享的基石區(qū)塊鏈技術(shù)的應(yīng)用與挑戰(zhàn)
- 無人機(jī)駕駛員的職業(yè)道德標(biāo)準(zhǔn)試題及答案
- 2025年什么是護(hù)理診斷及試題及答案
- 企業(yè)如何借助區(qū)塊鏈技術(shù)優(yōu)化內(nèi)部管理
- 醫(yī)院服務(wù)質(zhì)量與患者滿意度
- 數(shù)據(jù)隱私與審計(jì)試題及答案
- 視障人群智能出行產(chǎn)品設(shè)計(jì)研究
- 2017年高考生物試卷(新課標(biāo)Ⅰ)(解析卷)
- 《消防檢查指導(dǎo)手冊(cè)》(2024版)
- 藥品網(wǎng)絡(luò)交易服務(wù)三方平臺(tái)質(zhì)量管理體系文件-B2B平臺(tái)(完整版)
- 2024-2030年中國火力發(fā)電行業(yè)運(yùn)營狀況及未來投資趨勢(shì)分析報(bào)告
- 2025屆內(nèi)蒙古包頭市重點(diǎn)中學(xué)高考英語考前最后一卷預(yù)測(cè)卷含解析
- 《民間藝術(shù)之剪紙》課件
- 2024年4月醫(yī)學(xué)裝備質(zhì)量管理情況簡(jiǎn)報(bào)
- 企業(yè)形象設(shè)計(jì)(CIS)戰(zhàn)略策劃及實(shí)施計(jì)劃書
- 塔吊司機(jī)指揮安全培訓(xùn)
- 合同審計(jì)底稿
評(píng)論
0/150
提交評(píng)論