作为谷歌开发者布道师,我为什么要写这本通俗的《数据压缩入门》(一)
“我希望本书能揭开数据压缩的神秘面纱,为软件开发人员学习压缩算法提供一个起点,同时帮助他们开发出更好的软件。”
——John Brooks,Blue Shift公司CTO
本文选自《数据压缩入门》的序言,作者 John Brooks,是 Blue Shift 公司 CTO,他通过对自己经验的总结,告诉你数据压缩为什么如此重要!
我第一次编程时,连数据压缩是什么都不知道,更谈不上认识到它的重要性了。幸运的是,我的 Apple II Plus 计算机内存有 0.000 048 GB(约 48 KB),这在 1979 年算是很大的内存了,足够让我去探索编程和计算机图形学。我当时完全没有意识到程序和数据在后台是不断压缩和解压缩的,从而减小了它们在内存中的大小。说到这里,真要感谢 Woz !
有了几年的编程经验后,我发现:
数据压缩需要花费时间并可能会导致软件变慢;
改变数据的组织结构可以让数据压缩得更小;
复杂的数据压缩算法各式各样。
这使我意识到压缩不是一个刚性的黑盒,相反,它是一个灵活的工具,可以极大地影响软件的质量。我们可以通过以下几种方式运用压缩:
改变压缩算法有可能让软件运行得更快;
针对数据的组织结构选择正确的压缩算法,可以使数据变得更小;
选择不匹配的数据组织结构或压缩算法,可能会导致数据变大或运行变慢。
如今我明白数据压缩为什么重要了。如果数据太大、内存不够,或者解压缩太慢,可以稍微改变一下数据的组织结构,以使它更好地适应压缩算法。比如,我会将数单独放在一组,字符串放在另一组,为重复出现的数据类型建表,或者将分数截断为整数。如果能让数据与算法匹配,我就无须去做评估与采用新的压缩算法这样的苦差。
后来,我开始做专业的电子游戏,大部分游戏数据是由艺术家、设计师和音乐家这样的非技术人员生成的。结果表明,数学不是他们最喜欢讨论的话题,而且他们对改变游戏数据以便更好地利用我的单向压缩算法不太感兴趣。好吧,既然数据的组织结构无法改善,剩下能做的就是选择最合适的压缩算法来与这些“伟大的”艺术数据匹配了。
我调查了各种数据压缩算法,发现有两大类很适合电子游戏数据:
无损方法
去掉重复数据(LZ 算法)
熵压缩(哈夫曼编码、算术编码)
有损方法
降低精度(截断或降采样)
图像 / 视频压缩
音频压缩
对文本字符串和二进制数据使用 LZ 算法,可以将完全重复的数据压缩掉。对像素数据使用有损的矢量量化(vector quantization,VQ)算法,可以将像素映射为调色板。对音频数据使用有损的降采样和线性预测编码(linear predictive coding,LPC)算法,可以减少每秒的二进制位数。如果 CPU 足够快,前述所有这些压缩算法的输出都可以再用无损的哈夫曼算法进行一次额外的统计熵压缩。
20 世纪八九十年代,我参与制作了大约 30 个游戏,其中大多数使用的是这些算法,外加简单的数据构造工具对数据的组织结构进行有限的优化。
但是到了 2000 年左右,情况变得复杂起来。数据生成工具与数据展示和分析工具之间展开了持续的竞争。其结果是软件性能、存储大小、网络拥塞,以及压缩算法与数据组织结构的有效配对。
这种数据洪流被更大的存储空间(蓝光光盘、TB 级的硬盘以及云存储)、更快的多核 CPU、新的无损压缩算法(如 BWT、ANS 和 PAQ),以及针对图像、视频、音频等数据的有损编解码器的巨大性能提升部分抵消了。然而,由于数据每年的增长速度太快,相比之下,网络带宽的增加、压缩算法的性能提升以及存储容量增长的速度就太慢了。
这些因素造成了我们的现状,这也是本书内容之所以重要的原因。
程序员怎么才能知道为数据选择哪种压缩算法,以及对数据做什么样的改变能使特定的算法表现得更好或更差呢?其实真正有帮助的是对主要的数据压缩算法进行介绍,指导开发人员从众多可用的算法中选择最合适的。大部分开发人员其实并不需要掌握实现这些算法所需要的所有理论和数学细节,他们只要知道这些算法的优缺点,以及在特定场景中怎样充分利用它们即可。
我很高兴在过去的 37 年里一直在实现和使用不同的数据压缩算法,并看到它们的发展变化。我希望这本书能揭开数据压缩的神秘面纱,为软件开发人员学习压缩算法提供一个起点,同时帮助他们开发出更好的软件。
John Brooks
Blue Shift 公司首席技术官
谷歌开发高手通俗讲解
5类数据压缩算法
《数据压缩入门》
[美] 柯尔特·麦克安利斯等 著
王凌云 译
5G 时代即将到来,随之而来的是铺天盖地的数据洪流。在 5G 时代成功获取用户并提升转化率,离不开数据压缩的专业技能。
本书从理论和实践两方面入手,面向开发人员讲解数据压缩算法,并帮助开发人员选择合适的数据压缩工具。书中通过讲解清晰、步骤详细的示例,将数据压缩算法化繁为简,帮助开发人员做出正确的有关数据压缩的商业决策,从而实现客户更多、事业更兴、利润更高。
☟ 一键拥有
作为谷歌开发者布道师,我为什么要写这本通俗的《数据压缩入门》(一)相关推荐
- 作为谷歌开发者布道师,我为什么要写这本通俗的《数据压缩入门》(二)
数据压缩无处不在,对现代计算来说它仍然像以前一样必不可少.过去,1 GB 就已经很大了,数据以每秒几千字节的速度传输.从某种意义上来说,我们已经经历了一个完整的循环,从内存和带宽有限的古董计算机时代, ...
- 开源分享,让技术发光——最受欢迎“开发者布道师”评选结果来啦!
开源,是属于程序员的浪漫. 开发者们通过开放代码.布道分享的方式,相互促进.共同成长.而"飞桨开发者说"专栏是飞桨社区开发者分享知识.与其他AI开发者进行交流的平台,包含技术文章和 ...
- 为技术发声,因分享发光——最受开发者欢迎的“开发者布道师”评选结果来啦!...
点击左上方蓝字关注我们 画家通过举办画展展示自己的作品,作家通过出书传递自己的感情和思想,而对于开发者们而言,通过开源展示自己的代码,积极分享自己的开源项目和经验,是提升自己技术影响力,为技术圈做贡献 ...
- Rust-WebAssembly 开发者布道师招聘
Second State 于2019年成立,专注云计算与边缘计算的开源软件.我们的开源产品 WasmEdge, 目前已被 Linux 基金会旗下的 CNCF 接受为沙箱项目. WasmEdge 源代码 ...
- 福利来了 | 开发者社区布道师计划,奖品丰厚
此处应该有掌声 金蝶云·苍穹开发者社区一直都是开发者们共同经营的家.对于每个开发者来说,从这里出发.在这里学习.在这里吸收能量.在这里互动交流,这一幕幕发生在开发者社区的每一天,也是社区最想做到的.苍 ...
- 直播预告 | 对谈谷歌云 DORA 布道师:聊聊最关键的四个 DevOps 表现指标
本期分享 DORA 的全称是 DevOps Research and Assessment,是一个致力于 DevOps 调研与研究的组织,2018 年加入 Google Cloud.自 2014 年起 ...
- DevData Talks | 对谈谷歌云 DORA 布道师,像谷歌一样度量 DevOps 表现
本期 DevData Talks 我们请到来自 Google Cloud 谷歌云的 DORA 研究团队的嘉宾 Nathen Harvey与 Apache DevLake.CNCF DevStream ...
- 你认识这些布道师吗?
布道师,最近很新又很热门的流行词.很多人不解什么是布道师,但看完<布道之道>之后,您可能就会成为IT界新的布道师. "布道"(Evangelist)一词,不管是中文或英 ...
- 适兕:成为开源布道师
喜欢就关注我们吧! [溯源]在每一场对话中,追溯关于开源的故事,认识那些极客.自由,并坚持着的开源人. 点击上方"开源社"关注我们 | 编辑:李明康 | 设计:叶修缘丶 | 责编: ...
最新文章
- 【亲测有效】如何下载和安装Resilio BTSync
- 浅析网络营销外包中如何实现网络营销外包中的图片推广?
- HDU 4502 吉哥系列故事——临时工计划(动态规划)
- 让人期待的2011年度最佳 jQuery 插件发布啦
- dm365 resize
- 风能matlab仿真_发现潜力:使用计算机视觉对可再生风能发电场的主要区域进行分类(第1部分)
- 数据库(2)数据库介绍
- 栈中pop和top的区别是什么呢?用队列实现一个栈,Python语言
- 队列CircularFifoQueue:offer与add的区别
- 关闭linux系统命令是什么,linux shutdown关闭系统命令使用介绍
- openstack-KVM-vCPU
- mb778cn 计算机故障或繁忙,kx mb778cn驱动
- ILI9431的LCD屏使用,STM32F1控制
- 药物不良反应数据库信息的下载
- 瑞云Renderbus渲染农场GPU渲染集群正式上线!
- Excel中随机生成数字,函数RANDBETWEEN()的使用
- sRGB Color Space
- Win10 无线网络802.1X认证 PEAP问题
- 以拼音输入法(自然语言处理)为例,简单理解隐含马尔可夫模型
- 使用机器人工具箱在matlab上进行六轴机器人(6R)运动学建模【个人简记】
热门文章
- 使用函数求两个整数的最大公约数和最小公倍数
- 366万常用的中 txt 网盘_推荐三款我常用于备份文件的网盘,堪称精品中的精品,建议收藏!...
- python手记(45)
- 程序猿悲喜录:魔都,想说爱你不容易
- 燃爆了!天猫联合天一广场搞事情,800万宁波人坐不住了
- springboot~openfeign从JSON文件读取数据
- 安全与透明:智能互联网的基石
- Android string.xml 通配符 %$用法
- 那些在海外市场奋斗的华为人
- 清除administrator密码 方法