


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)報(bào)告與總結(jié)一、實(shí)驗(yàn)?zāi)康?、掌握哈夫曼編碼原理 ;2、熟練掌握哈夫曼樹得生成方法;3 、理解數(shù)據(jù)編碼壓縮與譯碼輸出編碼得實(shí)現(xiàn).二、實(shí)驗(yàn)要求實(shí)現(xiàn)哈夫曼編碼與譯碼得生成算法。三、實(shí)驗(yàn)內(nèi)容先統(tǒng)計(jì)要壓縮編碼得文件中得字符字母出現(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、哈夫曼樹得構(gòu)造 :w為
2、輸入得頻率數(shù)組,把其中得值賦給依次建立得H Nod 對象中得 dta 屬性,即每一個 HT Node 對應(yīng)一個輸入得頻率。 然后根據(jù) dta 屬性按從小到大順序排 序,每次從 ata 取出兩個最小與此次小得 HT Node, 將她們得 da相加,構(gòu)造出新得 TN e 作為她們得父節(jié)點(diǎn) ,指針 pare t,l f d,r g tchil 賦相應(yīng)值。 在把這個新 得節(jié)點(diǎn)插入最小堆。按此步驟可以構(gòu)造構(gòu)造出一棵哈夫曼樹。通過已經(jīng)構(gòu)造出得哈夫曼樹 ,自底向上 ,由頻率節(jié)點(diǎn)開始向上尋找 p ent, 直到 p en 為樹得頂點(diǎn)為止。這樣 ,根據(jù)每次向上搜索后,原節(jié)點(diǎn)為父節(jié)點(diǎn)得左孩子還就是右孩子,來記錄或
3、 0,這樣 ,每個頻率都會有一個編碼與之唯一對應(yīng),并且任何編碼沒有前部分就是同其她完整編碼一樣得。六、實(shí)驗(yàn)流程 初始化,統(tǒng)計(jì)文本文件中各字符得個數(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)行編碼 ; 譯碼時(shí)流程逆向進(jìn)行,從文件中讀出哈夫曼樹,并利用哈夫曼樹將編碼序列解碼。七、實(shí)驗(yàn)程序#incl de i stre m# nclude fst eam> in
4、c ude<iomanip > #i lu e < vecto >usin na espace s d;typ e str ct/節(jié)點(diǎn)結(jié)構(gòu)char d t ;/記錄字符值?long in weigh ;/記錄字符權(quán)重unsi ned in pare t,lchld,rhil;HTNo e,* uf a re;/動態(tài)分配數(shù)組存儲哈夫曼樹typ def har * *Hu fmanCode ; / 動態(tài)分配數(shù)組存儲哈夫曼編碼表void Seet(Huffm nTree &HT,int i,it &s1,i &2) / 在 HT1、 t 中選擇 par
5、ent 不為 0 且權(quán)值最小得兩個結(jié)點(diǎn) ,其序號分別為 1 與 s2? 1=0;s2 ;?int n=30 00,n2=30 00;f( int k=1 ;k<= ; k +)?if(HT 、 par =0 )? f( H k 、 eig <n1)? n2=n1; 1=HT 、 weig t;? 2=s1; s1= ;?el?i(H、wihtn2 )?n2HT 、 we ght ;? 2k;?oid H fma Codin (Huffm nTree HT,ffmaCode &HC, nt n)/ 將要編碼 得字符串存入空樹中ifstr a fi 1 ( ” zif、u tx
6、t ); ifstr a fin2( weig t、txt ”;) if(n )ret r; int 2* 1;int i ;?H =new Tode +1 ; ch zifu ; n *wei t;zifu= c ar +1; weig t=new i t n+1;?fr( =1;i =n; i+)/ 將待編碼得字符放在 ifu 數(shù)組中?ha ch;c =fin1 、get ();?ifui= h;?fo( i=1;i =n; +)/ 將帶編碼字符對應(yīng)得權(quán)值放在w ight 數(shù)組中? inwi ti; or( i=1 ; ;i+ )?HTi 、 dat =zifui;?H 、w igh we
7、ight i;?for (in+1;i<=m ;i+) i、 dt='?fr( 1;i=m ; +)HT 、p en=Ti、 child=H 、rc i d=0 ;?for ( i=n+1 ;i<=m ;+i )?it s1,s ;Sele (T,s1,2);H s1 、pa ent i; T 、paen=i;?Ti、l il s1; HTi 、 r hild=s2;?Ti 、weight= s1 、 weig t+ Ts2 、 e ht;?HC= ( Huffm no )malloc(n+1) zeo ( char* );開辟一個求編碼得工作空間?char *cd;?cd
8、=( har * ) mall c( * ze f(c a ); / 開辟空間存放權(quán)值cd -1=' 0'f r(i=1;i<= ; i+)?int s art= 1;?n c, f;for( =, f=H i 、 parent;f!= ;c=f ,f=H f 、 p rent) / 從葉子到根逆向 求編碼? if(Tf、lc ld= )? ? cd start= ';0/'/ 若就是左孩子編為 '0'?el? ?cdsa '1'/ 若就是右孩子編為' 1'?HC = ( ha * ) m ll c( n-s
9、tart) sze ( har); / 為第個編碼分 配空間str py(HCi,& art ) ;?deet d; / 釋放工作空間 d prnHff nTree ( uffm ee HT , nt ) / 顯示有 n個葉子 結(jié)點(diǎn)得哈夫曼樹得編碼表 o stream fout("h mtree 、 txt );/將對應(yīng)字符得得哈弗曼樹存入?cout < "NUM”dta"<"”< ”w i ht"<< ” ” <<"parent ”<” "<lchild&quo
10、t;< <” ”< "rchlid ” ndl; o (int i=; i<= *n 1; +)? fo< T i、 eig t etw(3) < i、paetsew()<< H 、 c il <<s tw(3) <H i 、 h ld<<endl ;? t i <se (5 ) < T i 、 da a< w ( 3) <HT 、weght< etw(3) <Hi、p nt< <s tw( )<<HTi 、lchild se w(3 )<
11、<HTi 、 child ndl;vod printHuffmanCodi g( uffm n ree HT,Hu f nCode C,nt n)/輸出字 符得對應(yīng)哈弗曼編碼并存入 code 、xt 文件c t< "Huf man c e is : ”< endl;?ofstream fout ( ” co e、 tx ”;)fo(in=;i<=n;i +)?c ut< HTi 、 aa<<” -> ;?cout<<(HC )< endl;?out <(HCi ) <<endl ;?vo co _ H
12、T,Hu fma e HC,it n)/對文件 tbern、txt 進(jìn)行編碼 , 并將編碼存入 codefile 文件中ifs am fin("oran、txt?ofstreafot( ”od”);?ecr cha a;?chrc;?le(ch=fi 、get()!='* ')、 pu hback(c);cout<"待編碼得字符串為:";?for(int=;<a、sie();k+ )? u k?cout endl ;?co t n 編碼結(jié)果: "<< l;?for(in i=0; i、 si e();i+)?for
13、(int j 1;j =n; +)?i? (a i =H j、 data)?f < H j;? break;?fi、 clos () ;?fo t、 coe() ;void Decodi (Hu ma Tr ,Huffman od C,i )/打開 code ile 文件并對文件內(nèi)容進(jìn)行譯碼in os m *n1; istream fin ( code” );?of t a fout("text");ve t r<c ar> a;?fo( h ; f n> >c;) a、ps_bac (c);?int c t=0;fo( int k=0;k&l
14、t;a 、 ze() ;+)? o ak ;? co nt+ ;? if( ont%5 =0 )? ot< ndl;?int =0;?int p ;/ 用 p 來記住 m 得值o t<enl; out < <”n 譯碼結(jié)果 : ”< endl;while(i a、s e()?= ;從哈弗曼數(shù)得根開始遍歷? i e(HT 、lild)? if(a = '1')? HT p、rch ld; ls ? p= Tp 、 lchi ;? i+;? fo HTp 、 ata;? cout HTp 、 at ;o d main() t n;out”輸入權(quán)值個數(shù):
15、 ”; /設(shè)置權(quán)值數(shù)值?ci n;? rintf( n"”);?Huff Tree T; / 哈夫曼樹 HT?Huffman de HC; / 哈夫曼編碼表 C?Hu anCodin (HT,H , n); / 進(jìn)行哈夫曼編碼ri tHu f anCodi g(HT , ,n); 顯示編碼得字符 ? rint ");ode_ );/顯示要編碼得字符串 ,并把編碼值顯示出來?eco ing(H ,HC,n);/譯碼并顯示譯碼后得字符串?p i f( ” n” );?syst m(pau e");八、結(jié)果分析哈夫曼編碼就是動態(tài)變長編碼, 臨時(shí)建立概率統(tǒng)計(jì)表與編碼樹。 概率小得碼比較長, 概 率小得碼比較長。概率大得碼短,這樣把一篇文件編碼后,就會壓縮許多。從樹得角度瞧, 哈夫曼編碼方式就是盡量把短碼都利用上。 首先,把一階節(jié)點(diǎn)全都用上 ,如果碼字不夠時(shí) ,然后 , 再從某個節(jié)點(diǎn)伸出若干枝 ,引出二階節(jié)點(diǎn)作為碼字,以此類推,顯然所得碼長最短,再根據(jù)建立得概率統(tǒng)計(jì)表合理分布與放置 , 使其平均碼長最短就可以得到最佳碼。
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年虛擬現(xiàn)實(shí)技術(shù)在職業(yè)教育課程中的教學(xué)設(shè)計(jì)研究報(bào)告001
- 2025年醫(yī)院電子病歷系統(tǒng)在醫(yī)療大數(shù)據(jù)中的應(yīng)用與優(yōu)化報(bào)告
- 2025年醫(yī)院電子病歷系統(tǒng)優(yōu)化構(gòu)建醫(yī)療大數(shù)據(jù)分析平臺報(bào)告
- 終身學(xué)習(xí)視角下2025年成人教育體系構(gòu)建與平臺運(yùn)營的師資培訓(xùn)策略報(bào)告
- 2025年醫(yī)藥流通行業(yè)供應(yīng)鏈優(yōu)化與成本控制政策研究實(shí)踐報(bào)告
- 2025年醫(yī)藥流通行業(yè)供應(yīng)鏈優(yōu)化與成本控制案例分析報(bào)告
- 保安證考試題及答案
- 安全員c證試題及答案
- 安全試題及答案和解析
- 零售私域流量運(yùn)營的線上線下促銷活動策劃報(bào)告
- 2024-2025學(xué)年江蘇省揚(yáng)州市江都區(qū)高一上學(xué)期期中考試英語試題(解析版)
- 音樂欣賞:貝多芬第九交響曲音樂課教案
- 2025年小學(xué)語文知識考核試題及答案
- 2025國家開放大學(xué)《人文英語1》綜合測試形考任務(wù)答案
- 2024北京海淀區(qū)三年級(下)期末英語試題及答案
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 部編版語文二年級下冊教案及教學(xué)反思(全冊)
- 《高危兒童保健服務(wù)指南(試行)》介紹
- 腸道水療課件
- 機(jī)動車排放定期檢驗(yàn)規(guī)范(HJ 1237-2021)_(高清-最新版)
- 校核計(jì)算2D1290220對稱平衡式無油潤滑壓縮機(jī)
評論
0/150
提交評論