当前位置: 首页 > 科技观察

说说压缩算法那些事

时间:2023-03-20 19:58:43 科技观察

1。好久没看到开场白了,我是老大。无论是做研究还是实际工作,都需要长期的积累才能深刻理解存在的问题、解决方案、瓶颈、突破方向等,今天就和大家聊聊压缩算法相关的知识点。废话不多说,马上开始阅读之旅吧!2.压缩算法的理论基础任何适用于工程的算法都有其数学和信息学的理论基础。就像我们写论文要先做模拟,理论为实践提供了一定的方向和依据。对于压缩算法,我们肯定会问:这就是压缩极限吗?有改进的余地吗?2.1信息学之父说到这里,不得不提一下信息学之父克劳德·埃尔伍德·香农,简单看一下他的简历:克劳德·埃尔伍德·香农(ClaudeElwoodShannon,1916年4月30日-2001年2月24日)是美国人数学家,信息论的奠基人。1936年获密歇根大学学士学位,1940年获麻省理工学院硕士、博士学位,1941年在贝尔实验室工作,1956年成为麻省理工学院客座教授1958年成为终身教授。成为名誉教授。香农提出了信息熵的概念,为信息论和数字通信奠定了基础,他也是著名的密码破解者。他在贝尔实验室的破译团队主要追踪德国飞机和火箭。相关论文:1938年硕士论文《继电器与开关电路的符号分析》,1948年硕士论文《通讯的数学原理》,1949年硕士论文?,1949年另一重要论文《Communication Theory of Secrecy Systems》。看完这篇介绍,感觉自己被秒化为尘埃,只能默默张网镇压云。我是一个人,我很抱歉。2.3信息熵熵本身是一个热力学范畴的概念,它描述的是混乱和无序的程度。这是一个特别有用的概念,因为无序和混乱是自然界的本质。举个不恰当的例子,我们在娱乐圈经常看八卦新闻的时候,会说信息量很大,上了热搜等等,那么我们应该怎么衡量信息量呢?上面提到的信息学之父香农解决了信息度量的问题,让一种无序、不确定的状态可以用数学语言来描述。在1948年的论文《A Mathematical Theory of Communication》中,作者等价地使用了熵和不确定性。论文提出信息熵是信息不确定性(Uncertainty)的度量,不确定性越大,信息熵越大。论文地址:http://people.math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf论文第6章信息熵的几个属性和信息熵与不同的联系betweencertainty:简译:信息熵随概率连续变化;如果每个因素构成事件的概率相等,那么信息熵随着构成因素总数n的增加而增加,即选择越多,确定性越大。当一个选择可以分解为两个连续的选择时,分解前后的熵值应该相等,不确定性也应该相同。我们假设一个事件有多种可能的选择,每一种选择的概率记为p1,p2....pn。文章进一步给出了概率和信息熵的公式:其中k为常态量。经过前面的一些分析,我们基本上是一头雾水,太难了。所以,让我们暂时记住一个结论:信息是可测量的,并且与概率分布有直接关系。3.数据压缩的本质既然有了理论支撑,我们来思考一下如何进行数据压缩?数据压缩可分为:无损压缩和有损压缩。无损压缩适用于必须完全还原原始信息的情况,如文本、可执行文件、源代码等。有损压缩压缩率高但不能完全还原原始信息,主要用于压缩视频、音频和其他数据。3.1数据压缩的定义压缩的前提是存在冗余。消除冗余就是压缩,用更少的信息来充分表达信息。我们看一下维基百科的定义:数据压缩是指在不丢失有用信息的前提下。为了减少数据量以减少存储空间,提高其传输、存储和处理效率,需要按照一定的算法对数据进行重组,以减少数据的冗余和存储空间的一种技术方法。举几个简单的例子:“北京交通大学交通信息工程与控制专业好”“北京交通大学交通控制专业好”。上述文字中“北京交通大学”可以换成“北交”,“交通信息工程与控制专业”可以换成“交通控制专业”。“aaaaaaaaaxxxxxxkkkkkzzzzzzzzzzz”和“8a6x6k10z”有明显的部分重复以上面的文字为例,a出现了8次,z出现了10次,如果我们分析输入字符的分布,确定“重复次数+字符”的规则就可以替换了。3.2概率分布与数据编码数据压缩本质上就是找出待压缩内容的概率分布,然后按照一定的编码算法将那些出现概率高的部分用较短的形式替换掉。因此,输入内容的重复部分越多,压缩区域越小,压缩率越高。如果内容几乎是完全随机的,没有重复,就很难压缩。这和我们平时优化代码性能的方式很相似,热代码的优化能带来更大的收益。3.3数据压缩限制如前所述,用较短的字符串替换较长的字符串实现了压缩,因此如果每次替换都使用最短的字符串,则应认为是最优压缩。所以我们需要找到理论上最短的替换字符串的长度。用二进制来说,就是二进制的长度,这样才能逼近压缩极限。来分析一下:抛硬币只有两种情况:正面和反面,所以篮球比赛中用1位二进制0和1表示胜/负/平,所以需要用2位二进制00胜01负,10抽签猜生日月份1月到12月有12种情况,所以需要用4位二进制来表示每个月。如果可能有n个不同的值,那么替换字符串需要log2(n)个二进制位来表示内容。假设内容由n个部分组成,每个部分出现的概率分别为p1,p2,...pn,则替代符号占用的最小二进制数为:log2(1/p1)+log2(1/p2)+...+log2(1/pn)=∑log2(1/pn)的可能情况越多,所需的二进制长度可能就越长。对于两个n相等的文件,概率p决定了这个公式的大小:p越大,文件内容越规则,压缩体积越小;p越小,文件内容越随机,压缩体积越大。例子:有一个文件,包含A、B、C三个不同的字符,50%是A,30%是B,20%是C,文件一共包含1024个字符,计算每个字符占用的二进制位期望为:0.5*log2(1/0.5)+0.3*log2(1/0.3)+0.2*log2(1/0.2)=1.49压缩后每个字符平均占用1.49个二进制位,理论上至少1.49*1024=1526个二进制位,约0.1863KB,最终压缩率接近18.63%。4、霍夫曼编码简介霍夫曼编码(HuffmanCoding),又称霍夫曼编码,是一种编码方法,霍夫曼编码是变长编码(VLC)的一种。霍夫曼在1952年提出了一种编码方法,这种方法完全根据字符出现的概率来构造不同前缀的平均长度最短的码字,有时称为最优编码,一般简称为霍夫曼编码(有时也称为Huff曼编码)。霍夫曼编码使用通过评估源符号的出现概率获得的可变长度码表对源符号进行编码。出现频率高的字母使用较短的编码,出现频率低的字母使用较长的编码,从而减少了编码字符串的总长度。4.1前缀编码霍夫曼编码除了使用变长码外,还使用前缀编码来保证译码时的唯一性。例如:A-0C-1B-00D-01编码为:000011010当我们对其解码时,会发现0000可能对应多种解码方式,如AAAA、AAB、ABA、BB等。哈夫曼树中的叶子节点之间没有父子关系,所以每个叶子节点的编码不能是其他叶子节点编码的前缀,这一点很重要。4.2哈夫曼树的简单构造哈夫曼树是哈夫曼编码的重要组成部分。下面通过一个具体的例子来看看哈夫曼树的一些特点。输入数据:“boobisbeeboy”字符串集和频率统计集{b,o,s,i,e,y}频率{b:4,o:3,e:2,i:1,y:1,s:1}一共有6个字符,所以需要3个二进制数字按照频率越高,字符&前缀编码规则越短b:00o:01e:100i:101y:110s:111注意:e不是001,因为不符合前缀码b是e的父节点。哈夫曼编码的原理和实现比较复杂,篇幅有限。后面我会单独写一篇文章来详细介绍。5、本文小结本文简要介绍了数据压缩,阐述了数据压缩的本质和算法的基本原理,以及哈夫曼树的一些原理。数据压缩直接关系到分析内容的概率分布和编码,但每个场景输入内容的侧重点会有所不同。使用机器学习来处理数据压缩也是目前的一个热门话题。篇幅有限,后续会重点介绍一些细节。这篇文章可以算是文章的开篇。下次见。