Huffman源程序

Huffman源程序

ID:40555531

大小:48.50 KB

頁數(shù):6頁

時間:2019-08-04

Huffman源程序_第1頁
Huffman源程序_第2頁
Huffman源程序_第3頁
Huffman源程序_第4頁
Huffman源程序_第5頁
資源描述:

《Huffman源程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、對文本文檔的Huffman編碼解碼,附詳細程序Shannon.txt是要求編碼的文檔首先,是要在commandwindow里面鍵入“fid=fopen('Shannon.txt','r');回車data=fread(fid);回車data”這是將文檔讀入,并且以ASCII碼的形式顯示出來。第一步,運行“統(tǒng)計1”文件,用來統(tǒng)計文檔中各個字符出現(xiàn)的個數(shù)第二步,運行“數(shù)量2”文件,用來計算字符的總個數(shù),總共是70個。第三步,運行“求和3”文件,用來統(tǒng)計文本里面所有字符出現(xiàn)的次數(shù),并且計算每個字符出現(xiàn)的概率。第四步

2、,運行“順序排列4”文件,將每個字符出現(xiàn)的概率進行從大到小的順序排序,然后將其放到M矩陣的第一行。第五步,運行“計算5”文件,用來進行huffman編碼的計算,具體算法如下:該矩陣定義為M矩陣,M矩陣的第一行,存放的是需要編碼的各個字符出現(xiàn)的概率,并且按照從大到小排列順序,然后再將第一行最后兩個數(shù)相加(即概率最小的兩個數(shù)相加),把相加得到的結(jié)果放到第二行,然后再將第二行重新進行排序,依此類推,一直到第69行,這時第69行只有兩個概率,并且相加肯定為1.第六步,運行“編碼6”文件,用來對M矩陣的數(shù)值進行huf

3、fman編碼,具體編碼過程如下:首先建立N矩陣,用來存放編碼的碼字,N=69*(70*70),總共69行,4990列,因為每一個碼字的編碼長度不會超過70,把4990列看成70個小段,每個小段可以存放70個字符。然后將字符0,賦給最后一行的第一小段,再將字符1,賦給最有一行的第二小段,在M矩陣中,由于每一行的最后兩個數(shù),都是這一行中概率最小的兩個數(shù),所以將倒數(shù)第二行的最后兩個數(shù)進行相加,然后用相加的結(jié)果到倒數(shù)第一行中去尋找,肯定會在倒數(shù)第一行中找到一樣的值,然后記錄下來在倒數(shù)第一行中這個值的位置,再將這個在

4、M矩陣中的位置對應(yīng)到N矩陣中,將N矩陣中的該位置的字符賦給倒數(shù)第二行的第二小段和第三小段,最后在給第二小段的后面賦字符0,給第三小段后面賦字符1,然后將在最后一行找到的那個數(shù)的左邊的數(shù),一一對應(yīng)到上一行去,右邊的數(shù),向左串一位,再對應(yīng)到上一行去,這樣依此類推,那么在N矩陣的第一行,可以得到最后的編碼。第七部,運行“首行編碼7”,輸出第一行的所有編碼,即為對應(yīng)字符的huffman編碼。clc;clearall;%將文檔讀入,并且以ASCII碼的形式顯示出來fid=fopen('Shannon.txt','r'

5、);data=fread(fid);data%統(tǒng)計文檔中各個字符出現(xiàn)的個數(shù)i=1;a=0;M=0:1:113;forii=10:122a=0;i=1;whilei<4991ifdata(i,1)==iia=a+1;endi=i+1;endj=ii-9;M(1,j)=a;fprintf('M=%d,',M(1,j));end%計算字符的總個數(shù),總共是70個i=1;j=1;N=0:1:100;whilei<114ifM(1,i)~=0N(1,j)=M(1,i);fprintf('N=%d',N(1,j));j=

6、j+1;endi=i+1;endfprintf('');fprintf('num=%d',j-1);%統(tǒng)計文本里面所有字符出現(xiàn)的次數(shù),并且計算每個字符出現(xiàn)的概率i=1;j=1;n=1;sum1=0;p=1:1:70;whilei<71sum1=sum1+N(1,j);p(1,i)=(N(1,j)/4990);n=n+1;fprintf('p=%f',p(1,i));i=i+1;j=j+1;endfprintf('');fprintf('sum1=%d',sum1);%將每個字符出現(xiàn)的概率進行從大

7、到小的順序排序,然后將其放到M矩陣的第一行i=1;j=2;whilei<71j=i+1;whilej<71ifp(1,i)

8、+M(i,j);n=1;while(n<(j-1))M(i+1,n)=M(i,n);n=n+1;endfork=1:68s=k+1;while(s<=(j-1))ifM(i+1,k)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。