编码的由来
在没有信息论之前,信息编码的复杂度通常和要传播的信息种类数量有关。早期人类了解和需要传播的信息是很少的,因此他们并不需要语言和数字,只需要发出不同的叫声,或者做些不同的手势和肢体接触即可。
但是随着人类的进步和文明的进展,需要表达的信息也越来越多,不再是几种不同的声音就能完全覆盖,语言就此产生。人们生活的经验,作为一种特定的信息,其实是那个时代最宝贵的财富,他们通过口述的语言传给了后代。同时,由于人类开始拥有一些食物和物件,便有了多和少的概念,因此数字也就产生了。
早期人类对信息的编码,基本上是每一种信息,都有一种相应的编码。要想表达5这个数字,就伸五个指头,但是很快人的十个指头就不够用了,于是早期不少文明就把脚给用上了。
在历史上一些文明采用20进制,比如玛雅文明。另一些文明多少留有了20进制的痕迹,比如英语中20(score)这个词,就是如此。
再后来,手脚并用也不够了,于是人类就在石头和骨头上划道道。再往后,当数字多到划道道也无法表达时,就有了对数字的编码,也就是各种文明的数字——用有限数字的组合可以表示更多的数。
我们如果要表达100个数字,一个办法是设计100个不同的编号,让它们一对一对应,另一种是只设计几种编号,然后相互组合,来表达100个数。
你可能觉得第二种方法更简洁,但这两种方法,在信息论中是等价的,我就来帮你算一下。
好,假定我们有100个数,从中挑出一个,不确定性是100选1,用上节课学得信息论的公式表达,它所代表的信息熵为log100=6.65(注:log以2为底的100的对数,课程中的log函数如果没有特殊说明都是以2为底的。)比特。也就是说,如果我们有6.65比特的信息,就可以确定100个数中的一个。接下来,我们看看刚才说的两种编码需要的信息量是否一样。
符号越少,意味着码位越长,所以你看到二进制通常是一长串的0101……由此可见,对数字的各种编码其实是等价的,无非是平衡编码复杂性和编码长度之间的关系。
对于数字,如果采用很多个符号,编码长度就短,但是系统就复杂。比如我们如果采用的是20进制,编码长度短了,但这就意味着它的编码系统很复杂,要记住的符号很多,大家学数学就太麻烦了。
在历史上即使有这样的文明,在竞争中也会被淘汰。玛雅文明发展不快的一个原因,就和它的计数和书写系统太复杂有关。
相反,如果采用很少的符号编码,比如采用二进制,编码的长度就长。比如100在二进制中的编码是1100100,你去买东西,人家问你要100块钱,说出这一大串数字,你很容易听糊涂,如果让你背九九八十一,它就成了100110011010001(9的二进制是1001,81的二进制是1010001),完全是自虐。
所幸的是,各种编码系统在数学上是等价的,我们可以为人类找一个自己方便使用的,也可以为计算机找一个它方便使用的。
但是要说明的是,由于它们是等价的,在一个编码系统中解决不了的问题,换一个系统同样解决不了。一些媒体讲,由于量子计算不是二进制的,因此它能解决今天计算机解决不了的问题,这个说法显然缺乏常识,因为任何进制都是等价的。
当然对数字的编码不能有半个,因此如果我们采用二进制对100个数编码,刚才计算出来是需要6.65个码,那就要取下一个整数,编码的长度也就是7了。于是我们就得到了信息论中一个重要的公式:
编码长度 ≥ 信息熵(信息量)/
每一个码的信息量。
香农对此作出了严格的数学证明,他同时还证明,只要编码设计得足够巧妙,上面的等号是成立的,这就是著名的香农第一定律。
加载中,请稍候......