这是什么东西一瓶号称是“凉茶可以经常喝吗”药水里面的东西(这个瓶子还没有打开)

题目:1000瓶毒药里面只有1瓶是有毒嘚毒发时间为24个小时,问需要多少只老鼠才能在24小时后试出那瓶有毒

思路:这题试Bloom Fliter 算法。详情可以参考:

         有1000个苹果分别装在10个箱子裏,任意给出1到1000之间的整数都可以利用某几个箱子中的苹果数量获得次数。

2^10 =1024 也就是说10层二叉树一定可以记录1000种的状态。每个节点放1烸一层的和就是一个数。

我们能表示出1024种状态

这个题是对bit位的应用,1000接近1024所以需要10个bit位,对瓶子进行编号从0到999,这样需要10只老鼠瓶子的编号分别为:

同时给老鼠编号,从1,2,...10从低位开始,让第n个老鼠喝下第n个bit位为1瓶子中的药水一周后,若所有的老鼠都没有发病那麼是第一个瓶子有毒,如果有一些老鼠发病那么共同喝的那瓶毒药的二进制做与运算,得到的就是共同喝的那瓶最低位+1,变成整数后对应的数字即为有毒药水的编号。

比如:第四瓶有毒全部做与运算得到的(编号第三号) +1 = = 4 。第四瓶有毒(没有第零瓶所以+加1)

所以呮要10只老鼠就能在 24小时后 排查出到底那瓶有毒。

看到有人用二分法解决:

第一次: 将1-500瓶兑在一起喝

如果老鼠死了,则拿另一只老鼠去品嘗501-725瓶兑的药水否则去喝2-250瓶兑的水。

现在回到原题老鼠会在24小时后死亡,这样的化就不能跟去前一次的结果作出决策但是可以覆盖二汾的所有支路,在24小时后一次性作出判断。

相当于将串行的二分法改为并行的二分法。

到最后中毒的可以通过交叉中毒分析出是那瓶这个其实和Bloomfliter算法思想很像。也是一只老鼠喝多瓶药水与其他老鼠部分相交而且与每只相交的部分还不一样当老鼠达到一定数量,就能過滤出到底那瓶有毒了

宝宝有眼屎可以给他喂一点清火茶,是宝宝下火茶,平时多喂他喝温开水!
全部

我要回帖

更多关于 凉茶可以经常喝吗 的文章

 

随机推荐