无损压缩算法——初探

常见无损压缩算法

Huffman coding

这种编码方式就是需要知道每个字符(symbol)出现的频率(需要扫描所有数据一次),然后构建哈夫曼二叉树。构建过程就是每次挑选出现频率最低的两个节点作为树的左右子节点,并且将它们合并成新的节点,新节点频率是它两之和。构建好huffman树后,就可以进行huffman编码,从根节点开始,左边支路编码为0,右边支路编码为1。然后再扫描一次数据,得到最优编码。缺点是耗时长,需要扫描两遍数据。因此有相关动态的huffman编码工作来提升它的性能,可能压缩率会有所下降。

Arithmetic Coding

信息压缩是有极限的,使用信息熵就可以得到这个极限。和哈夫曼编码一样,算数编码是熵编码的一种,是基于数据中字符出现的概率,给不同字符以不同的编码。但是huffman编码只能使用整数来表示,而算术编码最终得到的是一个小数,能更加接近理论最优,当然也是很耗时的。具体算法原理参考 算数编码原理解析 - SegmentFault 思否

Lempel-Ziv Code

例如 LZ77、LZ78

还有其它常见算法如PPM、BWT等,短时间没法理解

它们各自的性能如下:

image-20210515232756990

image-20210515232833498

上表是现有的工具以及使用的算法,算法的性能和具体的实现是很相关的。有时间还是要弄懂的,毕竟用的比较多。

参考文献

  • Barr, Kenneth C., and Krste Asanović. “Energy-aware lossless data compression.” ACM Transactions on Computer Systems (TOCS) 24.3 (2006): 250-291.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值