位掩码(老鼠试毒)

博客讲述了利用位掩码解决老鼠试毒问题的方法。通过位运算,将水瓶编号与老鼠关联,确定最少需要多少只老鼠来检测1000瓶水中哪一瓶有毒。例如,对于8瓶水,通过二进制矩阵转置分配到4个容器中,通过老鼠存活状态确定有毒水瓶。以此类推,1000瓶水需要10只老鼠进行检测。
摘要由CSDN通过智能技术生成

今天看到一个很有趣的老鼠试毒的问题,记录下来~~

  • 位运算,举个栗子6 and 11
6的二进制:      110
11的二进制:     1010
所以,  6 & 11 = 0010 (二进制)= 2(十进制) 
  • 其次,关于位掩码有一个老鼠试毒的有趣问题。我在这里看的,interesting ?

原题是问:有1000瓶水,其中有1瓶水中含有毒药——老鼠食用一点点就会在24小时之后毙命,问至少需要多少只老鼠能检测出哪一瓶水有毒。

先往小了说,假如有8瓶水,分别标号为1~8,用二进制表示分别为

二进制→十进制
0001   →1
0010   →2
0011   →3
0100   →4
0101   →5
0110   →6
0111   →7
1000   →8

将二进制的矩阵转置,并将相应水瓶中的水放入4个容器(因为8转化为二进制有4位)内:

0 0 0 0 0 0 0 1   →  容器1
0 0 0 1 1 1 1 0   →  容器2
0 1 1 0 0 1 1 0   →  容器3
1 0 1 0 1 0 1 0   →  容器4
1 2 3 4 5 6 7 8   →  水瓶编号 

容器1:8号水
容器2:4、5、6、7号水
容器3:2、3、6、7号水
容器4:1、3、5、7号水

容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值