%霍夫曼編碼的MATLAB實現(基於0,1編碼);
clc
清晰;
A=[0.4,0.2,0.15,0.1,0.1,0.05];%原始概率系列
% A = A/總和(A);
% A = fliplr(sort(A));%按降序排列
t = A;
[m,n]=大小(A);
b =零(n,n-1);%空編碼表(矩陣)
對於i=1:n
B(i,1)= T(I);%生成編碼表的第壹列
結束
r=B(i,1)+B(i-1,1);%最後兩個元素相加
t(n-1)= r;
t(n)= 0;
T = fliplr(sort(T));
t = n-1;
對於j=2:n-1%生成編碼表的其他列。
對於i=1:t
B(i,j)= T(I);
結束
k = find(T = = r);
B(n,j)= K(end);%從第二列開始,每列的最後壹個元素記錄該列中特征元素的位置。
r=(B(t-1,j)+B(t,j));%最後兩個元素相加
t(t-1)= r;
t(t)= 0;
T = fliplr(sort(T));
t = t-1;
結束
B%輸出編碼表
D1 = sym('[0,1]);%對最後壹列中的元素進行編碼。
END = END 1;
t = 3;
d = 1;
j=2,i=1: 2
// -
//從這裏開始我就看不懂了。可以幫我註釋壹下嗎?而且這個算法有錯嗎?我覺得有問題。
對於j=n-2:-1:1%從倒數第二列開始對每列中的元素進行編碼。
對於i=1:t-2
如果我& gt1。B(i,j)==B(i-1,j)
d = d+1;
其他
d = 1;
結束
B(B(n,j+1),j+1)=-1;
temp=B(:,j+1);
x=find(temp==B(i,j))
END(I)= END1(x(d));
結束
y=B(n,j+1);
END(t-1)=[char(END1(y)),' 0 '];
END(t)=[char(END1(y)),' 1 '];
t = t+1;
END 1 = END;
結束
結束
//上面壹段求助,看了幾個小時也看不懂。請幫我每個評論。
%排名後的原始概率序列
結束%編碼結果
對於i=1:n
[a,b]= size(char(END(I)));
l(I)= b;
結束
Avlen=sum(L.*A)%平均代碼長度
h 1 = log2(A);
H=-A*(H1')%熵
P=H/avlen%編碼效率