Bootstrap

MATLAB实现huffman编码及译码

使用前将建立input.txt放在和该.m文件同一文件夹中运行即可
最后运行结果:
1.文本统计过后的信源空间
2.信源空间对应的柱状图
3.编码结果
4.译码结果

自适应huffman对文本的编码与解码

clc;
close all;
clear all;

%数据读取
txt=fopen('input.txt');
shuju=fscanf(txt,'%c');
%去重
selected_shuju=unique(shuju);
selected_shuju=selected_shuju';
%长度
len=length(selected_shuju);
%求出信源符号的个数
for i=1:len
    count(i)=length(strfind(shuju,selected_shuju(i)));
end
p=count./sum(count);
n=length(p);
q=p;







%构建概率矩阵
m=zeros(n-1,n);
for i=1:n-1%合并n-1次
    [q,e]=sort(q);%E是个行向量 值代表q中该位置的概率在原序列中的位置
    m(i,:)=[e(1:n-i+1),zeros(1,i-1)]; 
    %m的特点:第一行n个非零元素,逐行递减,n-1行2个非零元素 
    q=[q(1)+q(2),q(3:n),1]; 
end







%构建编码矩阵 
for i=1:n-1
    c(i,1:n*n)=blanks(n*n); %c矩阵特点 与m对应  每一个n块对应一个概率的符号 第一行有n个 n-1
;