霍夫曼编码(matlab)学习笔记

这篇博客介绍了如何使用MATLAB进行霍夫曼编码。首先概述了手动霍夫曼编码的基本步骤,接着详细阐述了MATLAB编码过程,包括码树构建和码树回溯。在码树构建阶段,涉及概率向量的合法性检查、排序和合并。码树回溯部分解释了如何根据码树路径为概率分配编码。最后,作者进行了自我反思,强调勇于尝试和实践的重要性。
摘要由CSDN通过智能技术生成

(学生小白的学习笔记,若有侵权,联系后立即删除。贴上: 参考网址,笔记都是以自身学习状况和脑回路方便自己理解为原则写,如有欠缺或语言逻辑请见谅,若有问题也感谢指出,所有代码部分组合就是完整程序。)

手动霍夫曼编码大致思路:

(1)按从小到大的顺序排列
(2)合并最小两项,分别标记为0和1
(3)合并项与剩下的项重复以上步骤
(4)剩下只有两项时,按标记的倒序给对应项编码

matlab编码的大致思路:

以P=[0.1 0.2 0.3 0.4],顺序标记为1234,N=4举例

在这里插入图片描述

码树构建

在这里插入图片描述

(1)输入概率向量,检测合法性(每项不小于零,合等于1)

%取得信源概率矩阵,并进行合法性判断
P=input('请输入信源概率向量P=' );

N=length(P);
for component=1:1:N
if (P (component) <0)
error('信源概率不能小于0');
end
end
if((sum(P)-1)>0.0001)
error('信源概率之和必须为1');
end

(2)建:每次检索向量L(1,N);每次的排序向量Q(1,N);总的检索向量index(N-1,N);总的顺序向量G(N-1,N);

(3)合并Q的前两项,排序成下一个Q,每次的位置标记存入L,循环N-1次。一次Q为G的一个行向量,缺的地方补1,一次L为index的一个行向量,缺的地方补0;

%建立各概率符号的位置索引矩阵Index,利于编码后从树根进行回溯,从而得出对应的编码
Q=P;
Index=zeros(N-1,N); %初始化Index
for i=1:N-1
[Q, L]=sort(Q) 
 哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。 Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。 以哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的。 例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值