資源簡介
霍夫曼(Huffman)編碼算法是滿足前綴條件的平均二進制碼長最短的編碼算法。其編碼思想是將較長的編碼碼字分配給較小概率的信源輸出符號,而將較短的編碼碼字分配給較大概率的信源輸出。文章詳細描述了Huffman編解碼的算法和matlab實現,程序已經過驗證,可以直接使用

代碼片段和文件信息
function?[hl]=huffman(P)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%程序功能:霍夫曼(Huffman)編碼的Matlab實現%
%h為返回的編碼矩陣,l為信源的平均碼長?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=length(P);
Q=P;
Index=zeros(N-1N);??%初始化Index??
for?i=1:N-1??
???[QL]=sort(Q);??%將P中的元素按升序排序后,元素放到Q中,對應的索引值存到L中
???Index(i:)=[L(1:N-i+1)zeros(1i-1)];
???G(i:)=Q;%縮減信源得到的最終矩陣
???%Index為N-1行、N列矩陣,用來記錄每行最小兩概率疊加后概率排列次序元素不足的地方補0
???%參考doc?sort
???Q=[Q(1)+Q(2)Q(3:N)1];?%將Q中概率最小的兩個元素合并,元素不足的地方補1
end
%根據以上建立的Index矩陣,進行回溯,獲取信源編碼
for?i=1:N-1
????Char(i:)=blanks(N*N);%初始化一個由空格符組成的字符矩陣N*N用于存放編碼
end
%從碼樹的樹根向樹葉回溯,即從G矩陣的最后一行按與Index中的索引位置的對應關系向其第一行進行編碼
Char(N-1N)=‘0‘;%G中的N-1行即最后一行第一個元素賦為0,存到Char中N-1行的N列位置
Char(N-12*N)=‘1‘;%G中的N-1行即最后一行第二個元素賦為1,存到Char中N-1行的2*N列位置
%以下從G的倒數第二行開始向前編碼
for?i=2:N-1??
???Char(N-i1:N-1)=Char(N-i+1N*(find(Index(N-i+1:)==1))?-(N-2):N*(find(Index(N-i+1:)==1)));?
???%將Index后一行中索引為1的編碼碼字填入到當前行的第一個編碼位置
???Char(N-iN)=‘0‘;?%然后在當前行的第一個編碼位置末尾填入‘0‘?
???Char(N-iN+1:2*N-1)=Char(N-i1:N-1);?%將G后一行中索引為1的編碼碼字填入到當前行的第二個編碼位置?
???Char(N-i2*N)=‘1‘;??%然后在當前行的第二個編碼位置末尾填入‘1‘
???for?j=1:i-1??
?%內循環作用:將Index后一行中索引不為1處的編碼按照左右順序填入當前行的
?%第3個位置開始的地方最后計算到Index的首行為止
??????Char(N-i(j+1)*N+1:(j+2)*N)=Char(N-i+1N*(find(Index(N-i+1:)==j+1)-1)+1:N*find(Index(N-i+1:)==j+1));??
?end??
end??
?%Char中第一行的編碼結果就是所需的Huffman?編碼輸出,通過Index中第一行索引將編
?%?碼對應到相應概率的信源符號上。
???for?i=1:N??
??????h(i1:N)=Char(1N*(find(Index(1:)==i)-1)+1:find(Index(1:)==i)*N);
??????%根據Index第一行索引將Char中第一行編碼值還原為輸入概率矩陣中的順序填入Result
??????ll(i)=length(find(abs(h(i:))~=32));?
???end?
??l=sum(P.*ll);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????14??2010-11-19?17:23??huffman編解碼\abc.txt
?????文件???????2106??2010-11-19?19:05??huffman編解碼\huffman.m
?????文件??????53760??2010-11-19?19:48??huffman編解碼\Huffman編解碼.doc
?????文件???????1779??2010-11-19?18:24??huffman編解碼\main.m
?????文件????????653??2010-11-26?23:48??huffman編解碼\沈笑笑.txt
?????文件????????283??2010-11-19?19:49??huffman編解碼\說明.txt
?????目錄??????????0??2011-11-22?11:38??huffman編解碼
-----------?---------??----------?-----??----
????????????????58595????????????????????7
評論
共有 條評論