哈夫曼編碼使用說明_第1頁
哈夫曼編碼使用說明_第2頁
哈夫曼編碼使用說明_第3頁
哈夫曼編碼使用說明_第4頁
哈夫曼編碼使用說明_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、哈夫曼編碼使用說明哈夫曼編碼程序使用說明河南理工大學(xué)信息論與編碼 編程作業(yè)哈夫曼編碼程序使用說明2019 年 1 月本程序的編碼和運行都是在 VC+6.0 中實現(xiàn)的,整個程序雖然看似龐大,但編寫過程 清晰,采用模塊化編寫,各個問題逐個擊破,也方便對程序的管理和運行。整個程序的編寫分為五大部分: main 主函數(shù), xiaoxi 子函數(shù), add 子函數(shù), coding 子函數(shù), ordination 子函數(shù)。五大部分緊密相連,環(huán)環(huán)相扣,共同實現(xiàn)程序的編碼。Main ()主函數(shù)主要負(fù)責(zé)其它函數(shù)的調(diào)用和最后結(jié)果的輸出; Xiaoxi ()子函數(shù) 主要負(fù)責(zé)輸入需要的概率數(shù)據(jù); Add ()子函數(shù)負(fù)責(zé)

2、概率相加以便于排序;coding ()子函數(shù)負(fù)責(zé)具體編碼工作。從右往左逐列編碼,在每一列從下往上逐個編碼,負(fù)責(zé)對每一個位置處的編碼,與上課時學(xué)習(xí)的方法稍有不同,其原理相同。ordination ()子函數(shù)主要負(fù)責(zé)各個概率間以及概率和的排序。 該程序的優(yōu)點有以 下四個方面:一、程序在剛運行的時候需要輸入概率數(shù)據(jù),程序會啟動蜂鳴器,提示需要輸入數(shù)據(jù);在輸入需要輸入的數(shù)據(jù)個數(shù)之后,會再次啟動蜂鳴器提醒需要輸入概率數(shù)據(jù);程 序具有的提醒功能是本程序的一大特色。 二、程序在輸入完需要的數(shù)據(jù)(概率)后,會 自動排序,而不需要再去麻煩的排序。 三、程序在運行過程中會自動檢錯(錯誤報警):當(dāng)輸入的概率大于 1

3、 或小于 0 的時候,系統(tǒng)會自動提示錯誤; 當(dāng)輸入的概率之 和大于 1 時,系統(tǒng)會自動檢錯。四、程序的編碼過程清晰,編碼過程中所有的概率都會在顯示窗口顯示出來,更清楚易懂。注:若兩概率之和與另一概率相等,概率之和會自動排在后面理論上講求和排序的時候是按照列的形式,但程序按照行的形式。當(dāng)然了,再完美的計劃也會有破綻,這個程序也不可避免地存在些小缺點: 出錯報警時增加蜂鳴器 長時間工作;add函數(shù)語句重復(fù),流程圖中已經(jīng)進行了修改。程序使用說明:該程序是在VC+6.0環(huán)境下編寫的,運行也需要在 VC+6.0中運行,請確保你在裝載 有VC+6.0環(huán)境下運行。一、程序測試檢錯功能本程序會對輸入的概率自動

4、檢錯,任何輸入大于 1或小于 0 的概率,或概率之和不等 于 1,系統(tǒng)都會提示錯誤。 編碼功能進行哈弗曼編碼:第一步,輸入你所需要的概率個數(shù):如你需要輸入概率P1P10請輸入10,點回車鍵。第二步,輸入你所需要的概率,程序會自動排序:如輸入概率P1P10,分別點回車鍵確認(rèn),否則請按退格鍵。第三步,輸入完成后,按下回車鍵,程序會出現(xiàn)結(jié)果。二、測試應(yīng)用測試一1哈夫曼編碼程序使用說明測試二測試三2經(jīng)過測試發(fā)現(xiàn),程序滿足哈弗曼編碼的要求。3附 1 :源程序:#include #include#define w 10 float aw,bww=0,fw=0; int n); printf( 出錯,概率和

5、應(yīng)為 1 return(0); i,cwww,dw=0,m; xiaoxi() int n; float P=0;printf(n 請分別輸入消息概率 na);for(n=0;nscanf(%f,&an); if(an=1|an printf( 出錯,概率應(yīng)在 0,1 范圍內(nèi) n); return(0); break; P+=an; if(P!=1) Else return(1);ordination(int f,float *e) int g,j;float k;for(g=0;g for(j=g+1;j if(eg k=eg; eg=ej; ej=k; coding() int j,k,t

6、,r; i=m-3;4r=0; ci+100=0; ci+110=1; for(;i=0;i-) t=0;for(k=m-2-i;k=0;k-) if(fi=bi+1k)&(t=0)t=1;for(r=0;ci+1kr!=2;r+) cim-i-2r=ci+1kr; cim-i-1r=ci+1kr ; cim-i-2r=0; cim-i-1r=1; for(j=m-i-3;j=0;j-) for(k=m-2-i;k=0;k-) if(bij=bi+1k) for(r=0;ci+1kr!=2;r+) cijr=ci+1kr; add() int j;for(i=0;i bim-i-1=bi-1m

7、-i-1+bi-1m-i; fi-1=bim-i-1; for(j=0;jbij=bi-1j;ordination(m-i,bi); main() int n,x,y; floatK=0,H=0;for(n=0;nfor(x=0;x5for(y=0;ycnxy=2;printf(n 請輸入消息個數(shù) nna); scanf(%d,&m);printf(n); y=xiaoxi(); if(y=1); ordination(m,a); add();coding();printf(n 編碼過程 n);for(n=0;nprintf(n第%d列:,n+1);for(x=0;xif(bnx=0) break;printf(t%5.4f,bnx);printf(n); printf(n);for(n=0;nprintf(概率為 %5.4f 的符號編碼后碼字為 :t,an);for(x=0;xif(c0nx=2)break;printf(%d,c0nx); dn+;K+=an*dn;H+=(-an*log10l(an)/log10l(2); printf(t其碼長為: %dn,dn);printf(n平均碼長 K=); printf(%5.4f,K)printf(t信源熵 =%5.4f,H);printf(t編碼效率(H/K)=%5.4f

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論