美文网首页
吴军《信息论》硅谷面试题暗含的信息编码的有效性

吴军《信息论》硅谷面试题暗含的信息编码的有效性

作者: 高高_02c9 | 来源:发表于2019-06-15 00:04 被阅读0次

    硅谷的公司里有这样一道面试题:

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

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

    答案是实际上解决这个问题只要六只小老鼠就可以了,这是一个64选1的题目,那么需要的信息量就是log64,也就是6比特。你要是想具体操作验证,方法是这样的:

    吴军《信息论》硅谷面试题暗含的信息编码的有效性

    将一个十进制数除以二,得到的商再除以二,以此类推,直到商等于一或零时为止,然后依照倒序取除得的余数,即换算为二进制数的结果。比如32除以2,商是16,余数是0,然后再用商16除以2,得到余数0,以此类推,得到6个余数,再倒序排列,就是100000。要点是:除二取余,倒序排列。

    我们将这些药从0~63按照二进制编号,获得64个六位数的二进制编号,也就是从000000(六个零)到111111(六个一),每个二进制编号的最左边是第一位,最右边是第六位。

    然后选六只老鼠从左到右排开,和二进制的六位,从左到右地依次对应。文稿里的二进制编号,你可以试着一位一位竖着看,下面每只老鼠负责一位。

    从左边数第一个老鼠吃对应的二进制是1的药,0就不吃。那么老鼠1依次吃第32,33,34,……,63号药。第二只吃16,17,……,31,48,49,……,63号药,等等。最后一只老鼠吃1,3,5,……,63号药。你可能注意到了,6只老鼠都吃了63号,那是因为63对应的二进制编号是6个1,所以6只都要吃。

    吃完药之后三天,某些老鼠可能死了,我们假定第1,2,6这三只老鼠死了,剩下的活着。这说明什么呢?说明编号110001号药有问题,也就是在第1,第2,第6位上分别是3个1,因为这三只老鼠都吃了它,而3,4,5这三只没死的老鼠没有吃它(对应的位置为0)。而110001对应十进制的49,也就是说第49瓶药是毒药。

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

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

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

    通过一道硅谷面试题,就是让理论最佳值在应用中落地。

    相关文章

      网友评论

          本文标题:吴军《信息论》硅谷面试题暗含的信息编码的有效性

          本文链接:https://www.haomeiwen.com/subject/qxmixctx.html