當前位置:成語大全網 - 書法字典 - 誰能用matlab實現霍夫曼編碼算法

誰能用matlab實現霍夫曼編碼算法

基於MATLAB的霍夫曼編碼

函數【h,l】=霍夫曼(p)

if(長度(find(p & lt;0))~=0)

錯誤(“不是概率,負分量”);

結束

if(ABS(sum(p)-1)》10e-10)

錯誤(“不是概率向量,分量不等於1”)

結束

n =長度;

q = p;

m =零(n-1,n);

對於i=1:n-1

【q,l】= sort(q);

m(I,:)=【l(1:n-I+1),zeros(1,I-1)】;

q =【q(1)+q(2)、q(3:n)、1】;

結束

對於i=1:n-1

c(I,)= blanks(n * n);

結束

c(n-1,n)= 0;

c(n-1,2 * n)=‘1‘;

對於i=2:n-1

c(n-I,1:n-1)= c(n-I+1,n *(find(m(n-I+1,==1))...

-(n-2):n *(find(m(n-I+1,= = 1)));

c(n-I,n)=‘0‘;

c(n-I,n+1:2 * n-1)= c(n-I,1:n-1);

c(n-I,2 * n)=‘1‘;

對於j=1:i-1

c(n-I,(j+1)* n+1:(j+2)* n = c(n-I+1,...

n *(find(m(n-I+1,:)= = j+1)+1:n * find(m(n-I+1,= = j+1));

結束

結束

for i=1:n

h(I,1:n)= c(1,n *(find(m(1,:)= I)-1:find(m(1,)= = I)* n);

ll(I)= length(find(ABS(h(I,))~ = 32);

結束

l =總和(p . * ll);