这里对霍夫曼原理不做多加描述,主要讲解代码。
1.代码第一步主要是生成一个编码表B,它的第一列记录原始数据降序排列后的数,将两个最小的概率相加后,再进行排序记录到第二列,依次记录。以0.4 0.2 0.2 0.1 0.1为例
其中B的最后一行记录特征元素的行位置,特征元素是指两个最小概率之和相加的值。如,第一列0.1+0.1=0.2,因为在程序中设置了“若概率之和与原信源中的某概率相等,将概率之和向上排”,所以特征元素在第二行,记为2. 代码如下
clc;clear all;close all;
A=[0.4 0.2 0.2 0.1 0.1];
A=sort(A,'descend');%按降序排列
T=A;
[m,n]=size(A);%一行七列
B=zeros(n,n-1);%空的编码表(矩阵)
B(:,1)=T;%生成编码表的第一列
r=B(n,1)+B(n-1,1);%最后两个元素相加的值赋给r
T(n-1)=r;%令第n-1个数为r的值
T(n)=0;
T=sort(T,'descend');%将加完后的概率再次进行排序
t=n-1;
for j=2:n-1%生成编码表的其他各列,从第2列开始
B(1:t,j)=T(1:t);%B每一列记录相加完排序后的数列
K=find(T==r);%%T是向量