函數【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);