核酸检测中的逻辑和位运算
最近这段时间,整个深圳都算是严阵以待。
停止公共交通;多个区被管控,不允许进出;每天核酸检测筛查。
小毕老师目前差不多就是这样的状态。每天小区内都有核酸检测,每天都需要进行核酸检测的检查。
同时小毕老师也发现,现在的核酸检测已经从单独检测变成了10混1的混合检测。能更加适合在大规模人群中尽可能快速地筛查出感染人员。
也就是说一旦检测出阳性,则立马对这十人进行单独隔离和检测。
如果小毕老师用计算机的角度去看待这个问题,将情况换做真假值(True of False)与逻辑运算,令阳性为T,阴性为F,则最终的核酸检测结果是10个TF或起来的结果——只要任意一人出现T,则真就判定结果就是T。
所以今天就来讲一讲计算机的逻辑运算。
计算机的逻辑运算
主要有三类:&&(且),||(或),!(非)
与生活中的描述基本一致,且则表明需要同时满足:例如外面天气没下雨且操场开放且我没生病,我就出去跑步。否则我就在家休息。
而或表明只需要满足其中之一即可。外面天气下雨或者操场不开放或者我生病了,我就在家休息。否则就出门跑步。
而非则表示下面的内容全部取反,真变假,假变真。其实很明显看到,小毕老师我刚刚举的两个跑步的例子就是if的内部是完全相反的,实际上就是一个取反过程,也就说:
当然。我们知道目前来说,计算机的真假值可以以0和1来表示。所以也就是一个个的0和1进行了且或非的运算。
实际上计算机还有一个更加类似,但是又有些许不一样的运算。专门处理一连串的01的运算方式。叫做位运算。
计算机的位运算
当然首先我们要明白一点,一连串的01是什么。
例如0101,本质上来说,我们认为是一个数字的二进制表示,也就是这个数字本身是十进制下的5。(如果对进制转换有疑惑的可以查看以前的文章)
那么位运算的本质,实际上是一连串01,然后按照每一位做且或非的运算。
位运算下的且是&,或是|,非是~。
例如0101 & 1011:
每一位做类似的逻辑运算且即可。相应的或与非也是类似,都是对于每一位的操作,所以叫位运算。
接下来我们再来介绍一个位运算,也是今天的重点。
计算机的位运算——异或
异或运算,操作符为:^。
异或简单描述为,相同为0,相异为1。
(注意位运算,是每一位互相运算)
那异或有什么用呢?我们可以来看下面这个式子:
也就是说,两个相同的数字,异或的结果为0。
然后我们再看一下与0异或的结果。
因为1与0异或结果为1,0与0异或结果为0。那么,任何数字x与0异或都是x它本身ok,现在小毕老师便提出一个问题。
问题——公寓筛查
公寓核酸检测,每次登记检测用户的房间号,总共有n个人,故一次核酸检测会登记n个房间号。第二轮核酸检测后发现只检测了n-1名住户,现只知道前两轮的登记情况,问谁未做核酸检测。
简单描述一下,现在有2*n-1个数字,其中有n-1个数字出现了2次,有1个数字只出现了1次,找出只出现了一次的数字。
解决
实际上这是异或的经典问题。因为除了目标数字之外,其他数字都只出现了2次。而出现两次的数字异或结果为0,0异或其他数值均为其他值。所以把所有数字异或后的结果,即为只出现了一次的数字。
这边可以类比成两个相同的数字在异或下就等价于加法下的相反数,一操作就抵消了。所以最后剩下的数字就是只出现了一次的数字。
代码
零基础程序语言入门班
零基础程序语言入门班详情介绍
学员要求
对编程有兴趣,零基础的孩子。
上课时间
每周日下午2-5点
上课地点
福田区
师资介绍
何老师,计算机专业硕士保送生,现役ACM-ICPC队员,今年获得ICPC银川站金牌,CCPC银牌,EC铜牌以及邀请赛金牌。何老师不仅参赛成绩斐然,在教学上也有丰富经验,曾担任2019年CSP-S提高组集训班老师,以及数据结构专题班老师,教学细致耐心。
课表详情:
详情可扫描二维码联系余老师咨询了解
毕莘教育咨询(深圳)有限公司围绕信息学竞赛普及组、提高组、省赛、国赛进行培训,同时提供与信息学相关的高校自主招生政策咨询。教研团队由国内顶校师资构成,深圳本地教学团队由来自清华、北大等顶尖名校的硕士、博士研究生及NOI、ACM- ICPC退役选手组成。自成立已开展多次培训,服务学生数百人次。
原创文章,作者:深圳信息学_中小学编程_编程培训_信息学竞赛_毕莘教育咨询(深圳)有限公司,如若转载,请注明出处:深圳信息学_中小学编程_编程培训_信息学竞赛_毕莘教育咨询(深圳)有限公司