经典面试题之老鼠试药与汉明码

  前几天看了介绍汉明码的视频,当即就想到了这道面试题,k只小白鼠检测n瓶药中的1瓶毒药,初学者很容易被唬住,解法也鲜有提及背后的原理,以至于我当时看完完全不理解。

  其实就是信息传输中的汉明码检验,一段长度为n的二进制信息,在2^n处(n=0,1,2,3,...)添加检验码,用于检验后续段落中的信息是否发生翻转,回看开头的面试题,n瓶药中的1瓶毒药,就是长度为n的二进制信息中有1处数据发生翻转,k只小白鼠就是对应最大检验位2^n,所以也有2^k≥n+1,表示检验码和信息之间的关系,1代表2^0,人为地在头部添加1位检验码表示整段信息的状态。

  顺着解题的路子,有些思路上来就把药次序转为二进制排下来,第1只小白鼠喝第1列所有数字为1的药,第2只小白鼠喝第2列所有数字为1的药,也就是第n只小白鼠喝第n列数字为1的药,其实就是对应汉明码中第n位校验码从第n位开始检测n位跳过n位再检测n位的原则。

posted @ 2022-06-25 22:36  シシヌ  阅读(118)  评论(0编辑  收藏  举报