



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、哈夫曼編碼實(shí)驗(yàn)報告 實(shí)驗(yàn)報告與總結(jié) 一、 實(shí)驗(yàn)?zāi)康?1、掌握哈夫曼編碼原理; 2、熟練掌握哈夫曼樹得生成方法; 3、理解數(shù)據(jù)編碼壓縮與譯碼輸出編碼得實(shí)現(xiàn). 二、實(shí)驗(yàn)要求 實(shí)現(xiàn)哈夫曼編碼與譯碼得生成算法。 三、實(shí)驗(yàn)內(nèi)容 先統(tǒng)計要壓縮編碼得文件中得字符字母出現(xiàn)得次數(shù),按字符字母與空格出現(xiàn)得概率對其進(jìn)行哈夫曼編碼,然后讀入要編碼得文件,編碼后存入另一個文件;接著再調(diào)出編碼后得文件,并對其進(jìn)行譯碼輸出,最后存入另一個文件中。 五、實(shí)驗(yàn)原理 1、哈夫曼樹得定義:假設(shè)有 n 個權(quán)值,試構(gòu)造一顆有 n 個葉子節(jié)點(diǎn)得二叉樹,每個葉子帶權(quán)值為 wi,其中樹帶權(quán)路徑最小得二叉樹成為哈夫曼樹或者最優(yōu)二叉樹; 2、哈
2、夫曼樹得構(gòu)造: w為輸入得頻率數(shù)組,把其中得值賦給依次建立得 h nod對象中得 dta 屬性,即每一個 ht node 對應(yīng)一個輸入得頻率。然后根據(jù) dta 屬性按從小到大順序排序,每次從ata 取出兩個最小與此次小得 ht node,將她們得 da相加,構(gòu)造出新得tne 作為她們得父節(jié)點(diǎn),指針 paret,lfd,rgtchil賦相應(yīng)值。在把這個新得節(jié)點(diǎn)插入最小堆。按此步驟可以構(gòu)造構(gòu)造出一棵哈夫曼樹。 通過已經(jīng)構(gòu)造出得哈夫曼樹,自底向上,由頻率節(jié)點(diǎn)開始向上尋找 pent,直到 pen為樹得頂點(diǎn)為止。這樣,根據(jù)每次向上搜索后,原節(jié)點(diǎn)為父節(jié)點(diǎn)得左孩子還就是右孩子,來記錄或 0,這樣,每個頻率都
3、會有一個編碼與之唯一對應(yīng),并且任何編碼沒有前部分就是同其她完整編碼一樣得。 六、實(shí)驗(yàn)流程 初始化,統(tǒng)計文本文件中各字符得個數(shù)作為權(quán)值,生成哈夫曼樹; 根據(jù)符號概率得大小按由大到小順序?qū)Ψ栠M(jìn)行排序; 把概率最小得兩個符號組成一個節(jié)點(diǎn); 重復(fù)步驟(2)(3),直到概率與為; 從根節(jié)點(diǎn)開始到相應(yīng)于每個符號得"樹葉',概率大得標(biāo)"0',概率小得標(biāo)"1' 從根節(jié)點(diǎn)開始,對符號進(jìn)行編碼; 譯碼時流程逆向進(jìn)行,從文件中讀出哈夫曼樹,并利用哈夫曼樹將編碼序列解碼。 七、實(shí)驗(yàn)程序 #incldeistrem #ncludefsteam incudeioma
4、nip #iluevecto usin naespace sd; type strct /節(jié)點(diǎn)結(jié)構(gòu) char dt; /記錄字符值 重權(quán)符字錄記/ ;hgiew ni gnol unsined in paret,lchld,rhil; htnoe,*ufare; /動態(tài)分配數(shù)組存儲哈夫曼樹 typdef har * *hufmancode; /動態(tài)分配數(shù)組存儲哈夫曼編碼表 void seet(huffmntree ht,int i,it s1,i 2) /在 ht1、t中選擇parent 不為 0 且權(quán)值最小得兩個結(jié)點(diǎn),其序號分別為1 與 s2 ;2s;0=1 ;0003=2n,0003=n
5、tni f(int k=1;k=;k+) if(ht、par=0) )1ngie、kh(f n2=n1; 1=ht、weigt; 2=s1; s1=; le i(h、wihtn2) n2ht、weght; 2k; oid hfmacodin(huffmntree ht,ffmacode hc,nt n)/將要編碼得字符串存入空樹中 ifstra fi1('zifu、txt); ifstra fin2(weigt、txt'); if(n)retr; int 2*1; int i; ;1+edot wen=h ch zifu; n *weit; zifu= car+1; weigt
6、=new itn+1; 中組數(shù) ufi在放符字得碼編待將/)+i;n=i;1=(rf ;hc ah c=fin1、get(); ;h=iufi 中組數(shù) thgiw 在放值權(quán)得應(yīng)對符字碼編帶將/)+;n=i;1=i(of inwiti; or( i=1;;i+) ;iufiz=tad、ith ;ithgiewhgiw、h for(in+1;i=m;i+) i、dt=; )+;m=i;1(rf ht、pen=ti、child=h、rcid=0; )i+;m=i;1+n=i(rof ;s,1s ti sele(t,s1,2); hs1、paenti; t、paen=i; ;2s=dlihr、ith
7、;1slil、it ;the、2st+tgiew、1s=thgiew、it 間空作工得碼編求個一辟開;)*rahc(oez)1+n(collam)onmffuh(=ch ;dc* rahc 值權(quán)放存間空辟開/;)ac(fez*(cllam)* rah(=dc cd-1="0; fr(i=1;i=;i+) ;1=tras tni ;f,c n for( =, f=hi、parent;f!=;c=f,f=hf、prent)/從葉子到根逆向求編碼 if(tf、lcld=) cdstart=0;/若就是左孩子編為"0" le "1為編子孩右是就若/;"
8、1"asdc 分碼編個第為/ ;)rah(ezs)trats-n(cllm)* ah(=ch配空間 strpy(hci,art); deet d; /釋放工作空間 d prnhffntree(uffmee ht,nt ) /顯示有 n 個葉子結(jié)點(diǎn)得哈夫曼樹得編碼表 ostream fout(hmtree、txt); /將對應(yīng)字符得得哈弗曼樹存入 ''tnerap' 'thiw'' atd'' 'muntuoclchild' 'rchlid'ndl; o(int i=;i=*n1;+) fo
9、ti、eigtetw(3)i、paetsew()h、cilstw(3)hi、hldendl; thgew、th)3(waad、it)5(esitetw(3)hi、pntstw()hti、lchildsew(3)hti、childndl; vod printhuffmancodig(uffmnree ht,hufncode c,nt n)/輸出字符得對應(yīng)哈弗曼編碼并存入 code、xt 文件 cthufman ce is:'endl; ;)'xt、eoc'(tuof maertsfo fo(in =;i=n;i+) cuthti、aa' - ; ;ldne)ch(
10、tuoc ;ldne)ich(tuo vo co_ ht,hufmae hc,it n)/對文件 tbern、txt 進(jìn)行編碼,并將編碼存入 codefile 文件中 ifsam fin(oran、txt); ;)'do'(tof aertsfo ;a ahcrce ;c rhc )*"=!)(teg、if=hc(el 、puhback(c); cout待編碼得字符串為:; )+k;)(eis、a;= tni(rof ;ku ;ldnetuoc ;l:果結(jié)碼編 ntoc )+i;)(eis、i;0=i ni(rof )+;n=j;1j tni(rof )atad、jh
11、=ia(i fhj; ;kaerb fi、clos(); ;)(eoc、tof void decodi(humatr ,huffmanod c,i )/打開 codeile 文件并對文件內(nèi)容進(jìn)行譯碼 in os m*n1; istream fin(code'); ;)txet(tuof atfo vetrcar a; );cnf; h(of a、ps_bac(c); ;0=tc tni fo(int k=0;ka、ze();+) oak; cont+; if(ont%5=0) ;ldnto int =0; 值得 m 住記來 p 用/ ;p tni otenl; out'n 譯碼
12、結(jié)果:'endl; while(ia、se() 歷遍始開根得數(shù)曼弗哈從 ;= )dlil、th(ei )1=a(fi ;dlhcr、pth ls ;ihcl、pt=p ;+i fohtp、ata; ;ta、pthtuoc od main() t n; out'輸入權(quán)值個數(shù):' /設(shè)置權(quán)值數(shù)值 ;nic ;)n'(ftnir th 樹曼夫哈/ ;t eertffuh c表碼編曼夫哈/ ;ch ednamffuh 碼編曼夫哈行進(jìn)/ ;)n,h,th(nidocnauh rithufancodig(ht,,n); 顯示編碼得字符 ;)(tnir ode_); /顯示要
13、編碼得字符串,并把編碼值顯示出來 串符字得后碼譯示顯并碼譯/ ;)n,ch,h(gnioce ;)'n'(fip ;)euap(mtsys 八、結(jié)果分析 哈夫曼編碼就是動態(tài)變長編碼,臨時建立概率統(tǒng)計表與編碼樹。概率小得碼比較長,概率小得碼比較長。概率大得碼短,這樣把一篇文件編碼后,就會壓縮許多。從樹得角度瞧,哈夫曼編碼方式就是盡量把短碼都利用上。首先,把一階節(jié)點(diǎn)全都用上,如果碼字不夠時,然后,再從某個節(jié)點(diǎn)伸出若干枝,引出二階節(jié)點(diǎn)作為碼字,以此類推,顯然所得碼長最短,再根據(jù)建立得概率統(tǒng)計表合理分布與放置,使其平均碼長最短就可以得到最佳碼。 九、實(shí)驗(yàn)總結(jié) 通過這次實(shí)驗(yàn),我對二叉樹與
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年照相及電影洗印設(shè)備項(xiàng)目申請報告模板
- 河豚教學(xué)課件
- 哪有教學(xué)課件
- 船工號子教學(xué)課件
- 散居兒童保健課件
- 乙醇俗稱酒精跟我們?nèi)粘I蠲芮新?lián)系(-31)
- 教育相關(guān)課件教學(xué)
- 教育技術(shù)課件教學(xué)
- 葉子老師教學(xué)課件
- 新生幼兒半日活動方案
- 教育政策執(zhí)行情況調(diào)查報告范文
- 醫(yī)院設(shè)備采購方案(3篇)
- 2025至2030中國智能物流行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025年臺江礦泉水分公司招聘筆試參考題庫含答案解析
- 涉密測繪成果管理制度
- 亮化日常管理制度
- 跨國公司研發(fā)管理
- 15《真理誕生于一百個問號之后》第一課時 公開課一等獎創(chuàng)新教學(xué)設(shè)計及反思
- 福建省泉州市第五中學(xué)2025屆七下數(shù)學(xué)期末聯(lián)考試題含解析
- 遼寧郵政校招筆試題目及答案
- 職業(yè)技術(shù)學(xué)院衛(wèi)生信息管理專業(yè)人才培養(yǎng)方案
評論
0/150
提交評論