- 本文出自
ELT.ZIP
团队,ELT<=>Elite(精英),.ZIP为压缩格式,ELT.ZIP即压缩精英。 - 成员:
- 上海工程技术大学大二在校生
- 合肥师范学院大二在校生
- 清华大学大二在校生
- 成都信息工程大学大一在校生
- 黑龙江大学大一在校生
- 山东大学大三在校生
- 我们是来自
6个地方
的同学,我们在OpenHarmony成长计划啃论文俱乐部
里,与华为、软通动力、润和软件、拓维信息、深开鸿
等公司一起,学习和研究操作系统技术
…
【往期回顾】
① 2月23日 《老子到此一游系列》之 老子为什么是老子 —— 综述视角解读压缩编码
② 3月11日 《老子到此一游系列》之 老子带你看懂这些风景 —— 多维探秘通用无损压缩
【本期看点】
主题:《老子到此一游系列》之 老子见证的沧海桑田
塞缪尔·莫尔斯发明摩斯密码开创编码领域先河
香农提出信息熵,用数学语言阐明了概率与信息冗余度的关系
用生活中的烹饪视角解析Huffman编码过程
小波系数的各类编码方案大比拼
计算机视觉中的女神 —— Lenna
当代无线传感器型网络数据压缩
【技术DNA】
【智慧场景】
【脉动一下】
数据压缩理论缘起
起源
- 数据压缩概念的演变源于摩尔斯电码,也即我们日常所说的摩斯密码(SOS就是其中一种),它是一种时通时断的
信号代码
,通过不同的排列顺序
来表达不同的英文字母、数字和标点符号,从而最小化消息的大小和传输时间
。由电报之父塞缪尔·莫尔斯于1837年发明,1838年正式用于压缩电报中的信件
。
发展
- 1986年Richard W. Hamming编写出版的《Coding and information theory》一书中提到:++编码和信息理论的概念起源久远,但在信息理论还未建立起一个坚实的基础之时,人们对其的许多基础性想法与理解其实都只停留在1948年之前。++
- 说到信息理论,不得不提到一个人 —— Claude E. Shannon(克劳德·艾尔伍德·香农)。香农是美国数学家,也是
信息论的创始人
,他提出了信息熵的概念,为信息论和数字通信的发展奠定了基础。从本质上讲,数据压缩的目的就是要消除信息中的冗余
,而信息熵及相关的定理恰恰用数学手段精确地描述了信息冗余的程度。利用信息熵公式,人们可以计算出信息编码的极限,即在一定的概率模型下,无损压缩的编码长度不可能小于信息熵公式给出的结果
。
于是后来,上述形势被1948年香农发表的两篇名为《通讯的数学原理》的文章所打破,它们在信息理论领域几乎迅速地传播并流行了起来。很快,另外一些信息理论的文章出现在了相关期刊上,许多大学的电气工程等相关部门也开始教授相关课程。
但由于信息理论在当时是一个新领域
,人们对其能做的事情以及能应用的方向还没有一个确切的认识
,渐渐地,人们对其的关注度愈发降低
,相关课程的教授也随之减少。
转折
- 信息理论具有广泛适用于远离其原始灵感的情况的想法。好巧不巧的是,在信息理论被创立的左右之时,编码理论也诞生了。就编码理论而言,其
数学背景在一开始远没有信息理论那么复杂
,而且在很长一段时间里,它也没有得到理论界的重视。但是,随着时间的推移,各种数学工具如群论、有限域理论等慢慢被应用到编码理论中。现在,编码理论已成为数学研究中一个活跃的部分
。
从逻辑上讲,编码理论引出了信息论,信息论提供了对信息进行适当编码所能做的操作的界限。因此,这两种理论是密切相关的。
- 1948 年,香农在提出信息熵理论的同时,也给出了一种简单的编码方法——
Shannon 编码
,为压缩算法领域的发展奠定了专属基调。 1952 年, R. M. Fano 又进一步提出了Fano 编码
。这些早期的编码方法揭示了变长编码的基本规律
,也确实可以取得一定的压缩效果,但离真正实用的压缩算法还相去甚远
。
第一个实用的编码方法
是由 D. A. Huffman 在 1952 年的论文《最小冗余度代码的构造方法( A Method for the Construction of Minimum Redundancy Codes )》中提出的。直到今天,许多《数据结构》教材在讨论二叉树时仍要提及这种被后人称为 Huffman 编码的方法。 Huffman 编码在计算机界是如此著名,以至于连编码的发明过程本身也成了人们津津乐道的话题。据说, 1952 年时,年轻的 Huffman 还是麻省理工学院的一名学生,他为了向老师证明自己可以不参加某门功课的期末考试,才设计了这个看似简单,但却影响深远
的编码方法。
Huffman 编码效率高,运算速度快,实现方式灵活,从 20 世纪 60 年代至今,在数据压缩领域得到了广泛的应用。例如,早期 UNIX 系统上一个不太为现代人熟知的压缩程序 COMPACT 实际就是 Huffman 0 阶自适应编码的具体实现。 20 世纪 80 年代初, Huffman 编码又出现在 CP/M 和 DOS 系统中,其代表程序叫 SQ
。今天,在许多知名的压缩工具和压缩算法(如 WinRAR 、 gzip 和 JPEG )里,都有 Huffman 编码的身影。不过, Huffman 编码所得的编码长度只是对信息熵计算结果的一种近似,还无法真正逼近信息熵的极限。正因为如此,现代压缩技术通常只将 Huffman 视作最终的编码手段,而非数据压缩算法的全部。
Huffman码
- 说到哈夫曼编码或是霍夫曼编码,热爱自然科学、关注计算机科学的朋友们,或许曾听过、研究过;若是第一次听闻,或许会有一种像听到相对论、量子力学等一般的紧张感,请不必担心,我们接下来以一种老少皆宜、通俗有趣的方式传播分享,通读一遍说不定也能收获满满,接下来让我们进入正题吧:
- 先来感性地认识一下霍夫曼编码,首先顾名思义,我们可以明确一个大前提,这是霍夫曼的作品,其次这是一种编码技术。技术是用来解决问题的,那霍夫曼编码是用来解决什么问题的呢?——信息压缩问题。
- 现在大家心中已经对霍夫曼编码建立起了一个最基本的概念,这是由霍夫曼创立的用于解决信息压缩问题的编码技术。但这个概念还是太笼统了,再详尽一些是什么样子的呢?(别紧张,接下来你不会看到满屏的数学公式)。
- 我们用
烹饪
来举个例子,大家或许做过,或者看别人做过饭,做饭首先就得明确目标,就是我要做什么菜,对于霍夫曼编码来说就是目标压缩文本
是什么,然后你就得列个清单看看做这道菜需要哪些原材料,各种要多少;对于霍夫曼编码来说就是一个统计构成文本的元素的种类和出现频率
的过程;料备齐了就要掌握如何搭配,以及掌握火候,这就是考验一个人的厨艺的时候了;对于霍夫曼编码来说就是建立一个高效的字典树
的过程。这一套流程下来我们可以获得一个菜的菜谱,这就是一个成品菜的压缩成果;对于霍夫曼来说我们就获得了一个文本的字典树:
在线体验霍夫曼编码生成过程:
huffman.ooz.ie - Online Huffman Tree Generator (with frequency!)
现代场景
1. 汉字字形压缩
- 通俗些说就是把我们的中文文本进行识别和压缩,这与英文文本有什么不同呢?中华文化博大精深,不像英文文本只有26个字母和一些标点符号,汉字千变万化,无法通过传统的方式统计编码。但是万变不离其宗,我们从小写字就知道一点,我们的汉字是由
笔划
再按照一定笔顺写成的,那么这时笔划也就是我们前面所说的原材料模板:
而笔顺就是我们建立字典的依据,我们的汉字通过这样的处理就可以通过霍夫曼编码进行压缩编码了。
2. 3D网格的编码压缩
- 说到3D网格大家脑海中最先会联想到的可能会是3D动画,没错这一项技术广泛的应用于这一领域,下面一些图片可供直观感受:
那么如何让这些精美的3D作品高效的压缩存储呢?霍夫曼编码大显身手的时侯
到了,下面介绍相关场景并补充一项3D网格几何压缩
的强大算法。
【征服三角形】
-
对未征服也就是未编码之处围绕其边界插入三角形,进行拟合重构