数据压缩算法
数据压缩算法中的Huffman压缩算法和RLE压缩算法 数据压缩是一种技术方法,通过缩减数据量来减少存储空间,提高传输、存储和处理效率。其中,Huffman压缩算法和RLE压缩算法是两种常用的数据压缩算法。 一、Huffman压缩算法 Huffman压缩算法是一种无损压缩算法,它使用预先二进制描述来替换每个符号,长度由特殊符号出现的频率决定。出现次数比较多的符号需要很少的位来表示,而出现次数较少的符号则需要较多的位来表示。 Huffman压缩算法的原理是:利用数据出现的次数构造Huffman二叉树,并且出现次数较多的数据在树的上层,出现次数较少的数据在树的下层。于是,我们就可以从根节点到每个数据的路径来进行编码并实现压缩。 例如,对于一个包含100000个字符的数据文件,要压缩存储。各字符在该文件中的出现频度如下所示: 常规编码方法:我们为每个字符赋予一个三位的编码,于是有:此时,100000个字符进行编码需要300000位。 Huffman编码:利用字符出现的频度构造二叉树,构造二叉树的过程也就是编码的过程。这种情况下,对100000个字符编码需要224000位。 Huffman编码的过程实际上是构造一颗二叉树的过程。我们需要统计出各个字符出现的次数,然后根据各个字符出现的次数对它们进行排序。构造Huffman二叉树的规则是:从小到大,从底向上,依次排开,逐步构造。根据编码规则得到我们最终想要的结果。 核心代码: Huffman编码在以前的文章已经给出过,故在这只给出链接! 二、RLE压缩算法 RLE压缩算法是一种无损压缩的非常简单的算法。它的原理是:统计某一节字节在整个字节表中出现的次数,并以该字节和出现的次数作为编码的依据。 例如,现有如下一些字节数据: 那么,首先我们对上述每个数据出现次数做统计,即得到: 编码的依据得到了,万事俱备。由于RLE编码太简单了,于是我们一步就得到编码的结果了。 核心代码: char * REL_Coding(char *src_ch, int length, char *dst_ch) / * src_ch 为原始字符串, * length 为原始字符串的长度, * dst_ch 为根据算法得到的编码 / { int i = 0; int j = 0; int count = 0; char p = src_ch[0]; while(i <= length) //开始编码 { if(p == src_ch[i])//如果有重复,计算其重复的次数 ... RLE编码的过程简单,代码的实现也就很容易了。
剩余13页未读,继续阅读
- 思念白云蓝天2015-07-05勉强能看懂,里面好像有点小错误
- tuzilaopo2014-11-07恩,理解起来有点吃力,本人水平有限,不过还是感谢
- ly709795204ly2015-05-02慢慢看,算法不是新的。。
- hzjbsjz2015-07-15恩,理解起来有点吃力,本人水平有限,不过还是感谢
- 粉丝: 1
- 资源: 62
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助