要做课设啦!!疯狂赶DDL!!冲!
文本压缩
文本压缩是一项非常重要的技术,压缩和解压来处理文件可以减少文档在磁盘上的空间,从而使保存和传递都更加有效。
简单来说,压缩就是对文本进行重新编码,以减少不必要的空间。
哈夫曼编码就是一种最基本的压缩编码的方法。
哈夫曼树
所谓哈夫曼编码节约空间、时间的原理在我看来就是:给出现频率多的字符较短的编码,给出现频率低的字符较长的编码,以此减少编码长度。
来看两张图,第一张是一棵普通二叉树,第二张是一棵哈夫曼树。
我们通常将,带权路径最小的二叉树称为哈夫曼树。
构造哈夫曼树的办法
比如有一串由A,B,C,D,E构成的字符,你将字符和出现的频率排成以下的序列:
A5,E10,B15,D30,C40
- 将有权值的节点按照权值大小从小到大排列:A5,E10,B15,D30,C40
- 取头两个最小权值的节点作为一个新节点N1的两个子节点,权值较小的为左孩子,权值较大的为右孩子,新节点的权值为两个叶子权值的和,即15。
- 将N1替代A与E,插入有序序列,保持从小到大序列:N1(15),B15,D30,C40.
- 重复步骤2,将N1与B作为一个新节点N2的两个子节点。如图,N2的权值为15+15=30.
- 将N2替换N1与B,插入有序序列中,保持从小到大排列。即:N2(30),D30,C40。
- 重复步骤2,将N2与D作为一个新节点N3的两个子节点。
- 不停重复步骤2,直至所有节点都被放入树中,即构造成功。
哈夫曼编码
将所构造的哈夫曼树的左权值改为0,右权值改为1。
这时,对所有字符用从根到叶子所经过的路径的0或1来编码,来得到最终的哈夫曼编码;