美文网首页程序员码农的世界
两个有意思的编码算法

两个有意思的编码算法

作者: xumingmingv | 来源:发表于2017-03-20 22:38 被阅读288次

最近在看《Column-Stores vs. Row-Stores: How Different Are They Really?》, 发现里面提到了列式数据库使用了编码(压缩)算法来减少查询时候的I/O消耗,因此找了两种有意思的编码算法: Run length encodingDictionary encoding找出来学习了一下。

Run Length Encoding

Run Length Encoding(RLE)是无损压缩的一种,这种压缩方法在数据连续重复的情况较多的时候比较有用,比如下面的数据:

WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW

利用RLE会被压缩成:

12W1B12W3B24W1B14W

意思是说: 12个W,一个B,12个W, 3个B,24个W,1个B,14个W。原来需要67个字符表示的字符串,利用RLE之后只需要18个字符。

Dictionary Encoding

字典编码也称为替换编码,也是无损数据压缩的一种。它维护一个字典,在编码的时候把要编码的字符串转换成字典里面这个字母对应的下标,而解码的时候这从这个下标还原成原来的字符。我们余则成同志跟组织联系使用的就是这个字典编码:

字典编码在《潜伏》中的应用

字典编码分为两类,分类的依据是所依赖的字典是静态的还是动态的。上面的例子里面则成通知使用的书(好像是《康熙字典》之类的)就是静态的字典。静态字典应用的场景一般是要编码的字符比较固定,并且内容很长;跟静态字典相对应的是动态字典, 所谓的动态字典是在编码的过程中动态构建出来的,一开始字典是空的,输入的字符越来越多,这个字典也就越来越丰富。(具体的构建过程就不详细介绍了)

字典编码的关键是编码之后输出的不再是原来的字符了,而是代表这个字符的引用(通常是下标),而且可以把多个字符编码成一个数字,因为数字比字符串占用的空间小,因此也就达到了编码的目的。

参考资料

  1. Column-Stores vs. Row-Stores: How Different Are They Really?
  2. Run Length Encoding
  3. Dictionary encoding

相关文章

  • 两个有意思的编码算法

    最近在看《Column-Stores vs. Row-Stores: How Different Are They...

  • 编码算法

    在理清字符集和字符编码关系一文中我们介绍了常见字符集以及字符编码之间的关系,本期我们继续朝着这个方向介绍常见的编码...

  • Android-加密机制详解

    编解码 Base64编码算法 Base64编码算法是一种用64个字符(ABCDEFGHIJKLMNOPQRSTUV...

  • 【恋上数据结构与算法一】(十六)哈夫曼树

    哈夫曼编码(Huffman Coding) ◼ 哈夫曼编码,又称为霍夫曼编码,它是现代压缩算法的基础 ◼ 假设要把...

  • [FFMPEG]H.264中霍夫曼编码

    H264压缩中有个重要的算法,熵编码,熵编码分为两种cavlc(哈夫曼编码也叫变长编码)和cabac(算术编码),...

  • 数据结构-哈夫曼树

    哈夫曼编码(Huffman Coding) ◼ 哈夫曼编码,又称为霍夫曼编码,它是现代压缩算法的基础◼ 假设要把字...

  • iOS加密

    什么是加密? 加密 = 算法 + 钥匙 base64只是编码,不能归类于加密,base64编码原理 算法是固定且公...

  • 19-哈夫曼树

    哈夫曼编码(Huffman Coding) 哈夫曼编码,又称霍夫曼编码,它是现代压缩算法的基础。 假如我们现在有这...

  • 二十五、哈夫曼树

    哈夫曼编码(Huffman Coding) 哈夫曼编码,又称为霍夫曼编码,它是现代压缩算法的基础 假设要把字符串【...

  • 18_哈夫曼树

    哈夫曼编码的用途 哈夫曼编码,又称霍夫曼编码,它是现代压缩算法的基础 假设要把字符串【ABBBBCCCCCCCCD...

网友评论

    本文标题:两个有意思的编码算法

    本文链接:https://www.haomeiwen.com/subject/bstwnttx.html