数据压缩中的自适应霍夫曼编码与MNP5方法
1 自适应霍夫曼编码
1.1 基本概念
传统霍夫曼编码要求压缩器预先知道字母表中所有符号的出现频率,但实际中频率很少能提前得知。半自适应方法需压缩器读取原始数据两次,第一次计算频率,第二次压缩数据,期间构建霍夫曼树,不过这种方法速度太慢,缺乏实用性。而自适应(动态)霍夫曼编码则是实际应用中的常用方法,它是UNIX compact程序的基础。
该方法由Faller(1973年)和Gallager(1978年)最初开发,Knuth(1985年)进行了重大改进。其核心思想是压缩器和解压缩器从空的霍夫曼树开始,在读取和处理符号时对树进行修改(压缩器的“处理”指压缩,解压缩器的“处理”指解压缩)。压缩器和解压缩器需以相同方式修改树,确保在任何时候使用相同的编码,尽管这些编码可能会随步骤改变。可以说它们是同步的,或者说以锁步方式工作(不过它们不一定同时工作,压缩和解压缩通常在不同时间进行),用“镜像”来描述可能更合适,即解码器镜像编码器的操作。
1.2 具体操作流程
- 压缩器操作 :初始时,压缩器使用空的霍夫曼树,没有符号被分配编码。第一个输入的符号以未压缩形式直接写入输出流,随后该符号被添加到树中并分配一个编码。下次遇到该符号时,将其当前编码写入流,并将其频率加1。由于这会修改树,所以需要检查树是否仍是霍夫曼树(最佳编码),若不是则进行重新排列,这会导致编码改变。
- 解压缩器操作 :解压缩器执行与压缩器相同的步骤。当读取到未压缩形式的符号时,将其添加到树中并分配编码;当读取到压缩(可变长度)
超级会员免费看
订阅专栏 解锁全文
11

被折叠的 条评论
为什么被折叠?



