10个手指能表示多少个数字?有效编码的魔力,说出来你可能不信

编码系统本身在信息论上是等价的,但是,不同的编码系统可以有好有坏。比如今天使用的阿拉伯数字(其实是印度人发明的)0~9就是一个很好的编码系统,对于描述数字信息来讲,它们的数量不多不少,形状差异大。

如果采用一个小圆点“∙”代表一,两个“∙∙”代表二,三个“∙∙∙”代表三,十个“∙∙∙∙∙∙∙∙∙∙”代表十,就不太好,因为大家容易看花眼。因此好的编码第一个特点就是要便于区分不同的信息。

10个手指能表示多少个数字?有效编码的魔力,说出来你可能不信

1、信息编码的原则:易识别

我国在文革后曾经推行过一版过于简单的简化字,但是很快就停止使用了,这里面主要的原因是将汉字的笔画简化得过少后,使得近形字大量出现,不易辨识,非常容易搞混,因此很快就废止了,从信息论上讲,它违反了好编码要便于信息辨识的原则。

上述原则在平时的表达和沟通中也很重要。比如说,德国著名的营销专家和演说家多米尼克∙穆特勒提出的清晰表达的五个原则:明确、诚实、勇气、责任和同理心,前四条就和信息编码要便于识别有关。

“明确”原则这就不用说了,它是沟通的核心。只有意思表达得明确,才能保证对方不误解。

很多专业文件都写得像八股文,无论是病例,律师写的法律文件,或者科学杂志上的论文,都是如此,其最根本的目的就是要确保意思表达无误,在同行中不会产生任何误解。

“诚实、勇气、责任”原则,也是辅助将想法明确表达出来的。“诚实”是能够明确表述的基础,因为口是心非,难免会语焉不详。而“勇气”则代表对一件事的态度确定,因为只有内心非常确定,表达才能明确。至于“责任”,说的是代表对一件事要有所谓,如果对一件事持无所谓态度,说出来的话就一天一个样。

这就是今天要说的第一个重点,也就是信息编码的第一个基本原则:“易识别”,应用在我们个人沟通中,也是如此。

10个手指能表示多少个数字?有效编码的魔力,说出来你可能不信

2、信息编码原则:有效

便于识别,不容易混淆只是编码的第一个基本要求。作为一种好的编码还需要做到“有效”。

在信息传播上,只有当编码有效时才能在短时间里传递大量的信息。比如我们经常在谍战片中看到通过发电报传递信息,电报的电文都非常简洁,因为发报时间不能太长,否则很容易被对方发现,这其实符合有效性的原则。那么怎样做到有效编码呢?我们先来看这样一个问题:

用十根手指头,能表达多少个数字?

很多人觉得能表达十个数字,因为我们平时数数就是这么数的。也有人觉得可以表示100个数字,因为我们一个巴掌就能表示十个数字,将巴掌组合起来,一个表示个位,一个表示十位,就能表示从0到99共100个数字。这个想法非常好,能想到这层可以讲是多少体会了编码原理的精髓。

但是,这依然不是最有效的编码,如果我们考虑采用二进制,而不是十进制进行编码,则能表示1024个不同的数字。

具体的做法是这样的,我们把十个指头伸开:从左边的小拇指到大拇指编号为0~4,再从右边的大拇指到小拇指,编号为5~9。这十个指头,每一个都有伸出、收起两种状态。每一种状态对应于一位二进制,十个指头能表示10位2进制,因为10个指头,每个指头有两种情况,就是2的10次方,也就是1024种可能性。

10个手指能表示多少个数字?有效编码的魔力,说出来你可能不信

当然你说,能不能让每个手指具有伸开、半伸开和收缩三个状态,表示59049,也就是3的10次方种种可能性呢?这种想法不能说有错,但是并不好,

因为它过分强调有效性,而忽视了易辨识这个原则,凡事过犹不及。这是第二个信息编码的原则:有效性。

3、什么叫有效编码

如何组合信息,保证它高效传递,还能不违背第一条“易辨识”的原则。这就需要我们主动思考了,下面有这样一个现实的例子,看看能否启发你。

利用上述两个编码原则,可以有效地进行生物和IT产品的实验。硅谷的公司里有这样一道面试题:

有64瓶药,其中63瓶是无毒的,一瓶是有毒的。如果做实验的小白鼠喝了有毒的药,3天后会死掉,当然喝了其它的药,包括同时喝几种就没事。现在只剩下3天时间,请问最少需要多少只小白鼠才能试出哪瓶药有毒?

很多人看了这个题目从直觉出发,直接答64只,每一只吃一种不同的药。这么做自然没有问题,但是并不有效。能不能减少老鼠数量呢?你可以暂停10秒,自己思考一下。

好,要公布结果了,实际上解决这个问题只要六只小老鼠就可以了,这是一个64选1的题目,那么需要的信息量就是log64,也就是6比特。

你要是想具体操作验证,方法是这样的:

10个手指能表示多少个数字?有效编码的魔力,说出来你可能不信

看起来有点难懂,我们说明一下:

  1. 我们将这些药从0~63按照二进制编号,获得64个六位数的二进制编号,也就是从000000(六个零)到111111(六个一),每个二进制编号的最左边是第一位,最右边是第六位。
  2. 然后选六只老鼠从左到右排开,和二进制的六位,从左到右地依次对应。文稿里的二进制编号,你可以试着一位一位竖着看,下面每只老鼠负责一位。
  3. 从左边数第一个老鼠吃对应的二进制是1的药,0就不吃。那么老鼠1依次吃第32,33,34,……,63号药。第二只吃16,17,……,31,48,49,……,63号药,等等。最后一只老鼠吃1,3,5,……,63号药。你可能注意到了,6只老鼠都吃了63号,那是因为63对应的二进制编号是6个1,所以6只都要吃。
  4. 吃完药之后三天,某些老鼠可能死了,我们假定第1,2,6这三只老鼠死了,剩下的活着。这说明什么呢?说明编号110001号药有问题,也就是在第1,第2,第6位上分别是3个1,因为这三只老鼠都吃了它,而3,4,5这三只没死的老鼠没有吃它(对应的位置为0)。而110001对应十进制的49,也就是说第49瓶药是毒药。
10个手指能表示多少个数字?有效编码的魔力,说出来你可能不信

对于其它的组合也是同样的,你可以自己随便假定哪几只老鼠死了,看看哪瓶是毒药。当然,还有一种情况,就是所有的老鼠都没有死,那说明第0号药是毒药,因为其他的药都吃过了,就这一瓶没有吃。

通过上述方式,可以用6只小老鼠一次完成64选1的任务。怎么确定6只老鼠就足够了呢?结合我们前面讲到的理论,64选1的任务其实只需要log64=6,也就是6比特的信息就够了,每一只老鼠提供了一比特的信息。

因此,从理论上讲6只小老鼠就足够了,而有效的编码,其实就是完成从理论上的上限到现实中解决方案的桥梁。所以IT公司在招收计算机工程师中会考这道题,因为很多的IT问题,就是编码问题。

通过一道硅谷面试题,想传达给你的第三个知识点,也就是有效编码,其实就是让理论最佳值在应用中落地。

不仅如此,有效编码的思想在今天IT的产品性能比对测试中有直接的用途。

比如在一个产品中,有两种可用的方案,A和B,哪种更好呢?过去常常是工程师们和产品经理们拍脑袋想,有些时候某些人的“眼光”很好,正好蒙对了,选了一个用户也喜欢的方案,但是这种“眼光好”是无法复制的,

一个公司将自己的商业成功寄托在“眼光好”上早晚要失败。

10个手指能表示多少个数字?有效编码的魔力,说出来你可能不信

这时,就可以利用用户大数据评判A、B方案的好坏,通常的做法是随机选取1%的用户作对比实验。比如Google在改进搜索算法或者其它产品体验后,会先做这样不公开的测试,一般会持续一周左右。但是像Google这样有好几万工程师的大公司,每天的各种改进是很多的,如果每个项目都用掉1%的用户,把全部用户都用上也不够。

这就回到了我们刚才学过的高效编码问题,用少量用户同时进行很多个实验的方法,就类似上面这种让小白鼠试毒药的方法,也就是将各种不会发生冲突的实验用二进制进行编码,几组实验者,就可以同时进行几十个不同的实验。


分享到:


相關文章: