哈夫曼算法的应用
信息时代,人们对使用计算机获取信息、处理信息的依赖性越来越高。计算机系统面临的是数值、文字、语言、音乐、图形、动画、静图像、电视视频图像等多种媒体。数字化的视频和音频信号的数量之大是惊人的。
大数据量的图像信息会给存储器的存储容量,通信干线信道的带宽,以及计算机的处理速度增加极大的压力。单纯靠增加存储器容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,这时就要考虑压缩。
压缩的关键在于编码,如果在对数据进行编码时,对于出现频率高的数据,编码器输出较短的编码;而对于少见的数据则用较长的编码表示,就能够实现压缩。
利用哈夫曼算法进行压缩的一般流程为:
1.读文件,统计每个byte的出现次数
2.按规则生成哈夫曼树(按出现次数生成最优二叉树)
3.生成码表(字节,访问路径)
4.对文件重新编码,对应01串(01串为从哈夫曼树的根节点访问到此字节对应的子节点的“路径”,如:左子节点为0,右子节点为1)
5.将字符串的01转换成bit的01 写入文件
6.每8个01转成一个byte,向文件中写入这个byte。不足8位时全补0或1,并用一个byte记录补得0或1的个数。文件中最后一个字节为-1
7.将码表写入正在压缩的文件中。
而解压时,只需:
1.从文件中读取出码表
2.按码表读出每个byte
3.将byte转换成bit输出
利用哈夫曼算法实现的压缩是一种常见的无失真压缩,在网络通信、文件传输时有很大的用处……