数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程。它的原理是消除不必要的数据或以更高效的格式重新组织数据。在进行数据压缩时,你可以选择使用有损方法或无损方法。有损方法会永久性地擦除掉一些数据,而无损方法则能保证持有全部的数据。使用哪类方法取决于你要让你的文件保持多大的精准度。

本文会为你介绍6种不同的无损数据压缩算法,以及4种基于深度学习的图像/视频压缩算法。

6款无损数据压缩算法

无损压缩算法通常被用于归档或其他高保真目的。这些算法能够让你在确保文件可被完整恢复的同时减少文件大小。有很多种无损压缩算法供你选择。下面介绍6种常用的算法。

1. LZ77

LZ77算法发布于1977年。作为很多其他无损压缩算法的基础,它使用了“滑动窗口”的概念。在这个概念中,LZ77管理了一个字典。该字典使用三元组的方式:

  • 偏移量(Offset):短语起始处于文件开头之间的距离

  • 行程长度(Run length):组成短语的字符数

  • 偏离字符:表明新短语的标记符,匹配结束后,前向缓冲区中的第一个符号

当文件被解析时,字典会被实时更新以反映最新的压缩数据和大小。举个例子,如果一个文件包含字符串"abbadabba",那么被压缩到字典中的项就是"abb(0,1,'d')(0,3,'a')"。你可以看下下表的拆解过程:

这个例子中,被压缩后的数据并不比初始数据小多少。但一般情况下,当文件很长时,这种压缩效果就会显现出来。

2. LZR

LZR由Michael Rodeh于1981年提出,它是在LZ77的基础上发展而来。这个算法目标是成为LZ77的一个线性时间替换算法,但编码后Udell指针可能指向文件的任意偏移量,意味着需要耗费可观的内存,因此表现不如LZ77。

3. LZSS

LZSS,全称Lempel-Ziv-Storer-Szymanski,于1982年提出。它也是旨在提升LZ77的一个算法。它引入了一个方法能够检测是否真的减少了文件大小。如果未能起到压缩效果,就保持原来的输入格式。LZSS还移除了对偏离字符的使用,只使用对。这个压缩算法广泛用于归档格式,如RAR以及网络数据的压缩。

4. DEFLATE

DEFLATE算法于1993年提出。作者是Phil Katz。该算法结合了LZ77或LZSS预处理器与霍夫曼编码。霍夫曼编码是1952年提出的诉法。它是一种熵编码,主要基于字符出现频度分配编码。

5. LZMA

LZMA算法,全称是Lempel-Ziv Markov chain Algorithm(LZMA),于1998年提出,是LZ77的改进版,旨在实现.7z格式的7-ZIp文件归档。它使用链式压缩方法,在比特而非字节级别上应用修改后的LZ77算法。该压缩算法的输出稍后被算数编码进行处理以便后续进一步压缩。根据具体的实现不同,可能会引入其他的压缩步骤。

6. LZMA2

LZMA2算法于2009年提出,是LZMA的改良版。它提升了LZMA在多线程能力上的性能以及提升了处理不可压缩类型数据的表现。

4种基于深度学习的图像/视频压缩算法

除了上面介绍的静态压缩算法,还有基于深度学习的压缩算法可供选择。

1. 基于多层感知机的压缩算法

多层感知机(Multi-Layer Perceptron,MLP)技术使用多层神经元来获取、处理以及输出数据。它能够被应用到数据降维任务和数据压缩。首个基于MLP的算法于1988年被提出,目前已经被应用到:

  • 二进制编码——标准的双符号编码

  • 量化——限制从连续集到离散集的输入

  • 特定领域内的转换——像素级的数据变更

MLP算法利用分解神经网络上一步的输出来确定最佳的二进制码组合。后面,使用预测技术优化这个方法。预测技术能够通过反向传播基于相邻数据来提升数据准确度。

2. DeepCoder -- 基于视频压缩的深度神经网络

DeepCoder是一个基于卷积神经网络(CNN)的框架,它是传统视频压缩技术的替代。该模型为预测信号和残留信号使用单独的CNN。它使用标量量化技术和一个传统的文件压缩算法——霍夫曼编码——将编码特征映射到一个二进制流中。一般认为,该模型的性能要优于著名的H.264/AVC视频编码规范。

3. 基于CNN的压缩算法

CNN是分层的神经网络,通常用于图像识别和特征检测。当应用到压缩时,这些神经网络使用卷积操作来计算相邻像素点之间的相关性。CNN展示出了比基于MLP算法更好的压缩结果,提升了超分辨率下的性能以及减少了伪影。另外,基于CNN的压缩还提升了JPEG图像的品质,因为它减少了峰值信噪比(PSNR)和结构相似性(SSIM)。基于CNN的压缩通过使用熵估计法还实现了HEVC的性能。

4. 基于生成式对抗网络(GAN)的压缩算法

GAN属于神经网络的一种,它使用两个神经网络彼此竞争的方式来产生更精确的分析和预测。最早基于GAN的压缩算法于2017年被提出。这些算法的文件压缩比例是其他常见方法(如JPEG、WebP等)的2.5倍。你可以使用基于GAN的方法通过并行化处理来实现实时压缩。主要的原理是基于最相关的特征来压缩图片。当解码的时候,算法基于这些特征来重建图像。和基于CNN算法相比,基于GAN的压缩算法通过消除对抗损失能够产生更高品质的图像。

总结

压缩算法能够帮助你优化文件大小。不同的算法有不同的结果。本文简述了6种静态的无损压缩算法以及4种基于深度学习的压缩算法。当然,如果这些算法都不适用于你的场景,你可以查看这篇文章来寻找适合你场景的算法。算法有很多,总有一款适合你!

原文地址:

https://dzone.com/articles/crunch-time-10-best-compression-algorithms

lzma算法_十款性能最佳的压缩算法相关推荐

  1. 十款性能最佳的压缩算法

    数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程.它的原理是消除不必要的数据或以更高效的格式重新组织数据.在进行数据压缩时,你可以选择使用有损方法或无损方法.有损方法会永久性地擦除掉一些数据, ...

  2. 灵图天行者9 pc版_2019十款优化最佳的PC游戏!第一还是冷饭

    ↑点击上方  关注我们游戏的优化程度与其运行效果及配置要求息息相关,为此外媒dsogaming在PC新游戏发售时都会对实机表现做分析,检测器优化程度.他们今天公布了"2019十款优化最佳的P ...

  3. rust沙河游戏_十款特别好玩的沙盒建造游戏,喜欢生存建造的朋友千万不要错过...

    原标题:十款特别好玩的沙盒建造游戏,喜欢生存建造的朋友千万不要错过 各位上期在文章里我把鬼泣(ACT)弄到RPG游戏里,非常的抱歉,希望大家给我多多提建议,我会做的更好,喜欢的朋友可以关注我一下,毕竟 ...

  4. 导航模块自带的rtk算法_这款百元国产RTK板卡要改变高精度定位市场格局吗?

    由欧洲GNSS管理局发布的<GNSS市场报告(2019)>显示,全球宏观趋势带动产业和个人GNSS 应用,延续近几年的显著增长,包括设备和服务在内的全球GNSS市场未来十年将继续扩展,其中 ...

  5. 二自由度云台扫描算法_几款超级防抖手持云台,拍摄大片绝不抖

    而今是Vlog的盛世时代,每一个年轻人都有一个vlog梦想,手机也可以拍出大片,总是苦于拍摄出的东西效果不好?不敢跟拍?一边跑一边手机摄影就糊成一团?那么怎么告别萌呆定点拍摄,今天给大家分享几款可以拍 ...

  6. JAVA 判断简单密码算法_十道简单算法题二【Java实现】

    前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...

  7. 最佳 开源 人脸识别算法_开源项目的最佳社会结构是什么?

    最佳 开源 人脸识别算法 代码审查是一种实践,可促进开源项目中的快速协作,知识共享和最高质量. 代码审查的社会结构是项目的定义特征. 开源项目的最佳社会结构是什么? 在本文中,我们通过分析三个常见模型 ...

  8. mysql 编程算法_十大编程算法助程序员走上高手之路

    算法一:快速排序算法 快 速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种 状况并不常见.事实上,快速排 ...

  9. 希尔排序是一种稳定的排序算法_十大经典排序算法——希尔排序

    vs code ppt c++/java 目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的 ...

最新文章

  1. java 查询线程_Java多线程查询
  2. 社区不支持HTML,popover不支持html内容吗?
  3. 【MyBatis】MyBatis中,大于号、小于号的两种表达方式
  4. React Native之通过createStackNavigator实现携带参数的页面与页面之间的跳转
  5. matlab和robotstudio,MATLAB与Robotstudio建立socket通信(初探)
  6. Shell编程基础(1)
  7. tiptop 编译运行_putty终于让我的TIPTOP脱离虚拟机在64位上运行了。
  8. java零碎要点009---java实现服务器心跳机制,TCP握手
  9. 服务器TIME_WAIT和CLOSE_WAIT分析和解决办法
  10. WordPress根目录(Root)
  11. 20190612每日一句
  12. 智能实验室-全能优化(Guardio) 4.3.0.730
  13. Linux系统U盘怎么格式化,u盘怎么格式化各系统教程
  14. 计算机打印机无法打印,电脑打印机无法打印怎么办 打印机不能打印解决办法...
  15. 数据库期末大作业:机票预定信息系统数据库设计与实现
  16. 基于安卓的民宿客栈预定App丨有微信小程序
  17. 1144 消失的正数
  18. 数据挖掘竞赛预测模型——五折交叉验证
  19. 【期权系列】期权市场 PCR 指标的策略应用
  20. HC-SR04超声波测距模块使用方法和例程(STM32)

热门文章

  1. iOS 警告 Local declaration of 'XXX' hides instance
  2. dvm_lock_sample 解析
  3. zigbee抓包实验过程
  4. Mac - was compiled with optimization - stepping may behave oddly; variables may not be available.
  5. CAD快捷键小结(一)
  6. 如何安装2018matlab,MATLAB 2018a软件安装教程
  7. pdf太大怎么压缩大小?
  8. 银行测试(7)-支付测试
  9. 5W无线充SOC方案芯片FS68001封装SOP16和SOP8
  10. 无限城app为什么服务器繁忙,鬼灭之刃:无惨为什么敢一人前往无限城,其实他最大底牌就是上五...