1 1000个人做核酸,有一个阳性,怎么快速查出来(二分法、编码法 - 二进制位)
首先我们整理一下题意,这里的快速查出来是指每个人都做完一次核酸后,使用的最少的核酸管的数量,这等同于求最少的检测次数。正常的思路是每一个人都使用一个核酸管,然后检测1000次,但是效率很低,可以看到平常做核酸的时候都是10人一管的,我们可以从这方面借鉴一下思路。
1.1 二分法
每500人一管,检测完这一管是阳则说明阳性在这500人中,否则在另外500人中,假设是阳,则继续对500人二分,250一管,再继续判断是否为阳性,随后再重复之前的二分步骤,直到检测到最后2个人的时候,则再检测两次就可以确定最终的阳性患者。时间复杂度由O(n)降低到了log(2,n),即最多检测10次就可知道患者编号
1.2 如果使用二进制位如何快速确定阳性(使用最少的试剂管,同时检测最少的人数)
二进制位的方法可以这样实施:首先给每个人分配一个唯一的10位二进制编号(因为2的10次方是1024,足够分配给1000个人)。然后,对于每个二进制位,将该位为1的所有人的样本混合,然后进行检测。如果某次混合检测结果为阳性,那么阳性者的二进制编码在该位上为1。**通过10次检测,就可以确定阳性者的完整二进制编码,**从而找到阳性者。
1.2.1 为什么最多通过10次检测就可以确定阳性患者的完整二进制编码?
核心原理:因为阳性患者的所有为1的二进制位参与检测时,其所在组使用的溶液管都会是阳性,如果不为阳性,则定为0,如果为阳性则记为1
使用二进制位检测方法,我们需要对每一个二进制位都进行一次混合检测。假设我们有一个10位的二进制编码,因此我们需要进行10次检测,每次检测对应一个二进制位。如果某次混合检测结果为阳性,那么阳性者的二进制编码在该位上为1。
在这10次检测完成后,我们可以得到阳性者的二进制编码(这里有一个前提是每一个人的二进制编码都是不同的)。比如说,如果我们发现第2、4、7位的检测结果为阳性,那么阳性者的二进制编码在这三个位上为1,其他位上为0。这样,我们可以根据这个二进制编码找到阳性者。
因此,总共需要进行10次检测,每次检测对应一个二进制位。通过这10次检测,我们可以确定阳性者的身份。
1.3 现实中推荐的方法
每一百人混合检测到一根试管中,只需要最多检测10就能确定阳性在哪一组,最后再分成10组,每组10人,检测10次就能确定最终的阳性患者所在的组,针对最后这10组可以分别检测一次,这样就确定了最终的患者编号,最多共检测30次即可
2 找出重量不一致的球
2.1 给你一个天平 没有砝码 给你9个小球 其中8个小球重量是一样的 1个比较轻 怎么快速找到这个轻的球;升级:假设你不知道另外的1个小球是轻还是重
第一种情况:我们知道那个轻球是轻的。我们可以这样操作:将9个球分为三组,每组3个。然后用天平称两组,如果平衡,则轻球在未称的那一组,否则轻球在较轻的那一组。然后将这一组的三个球继续分,称重找轻球。
2.2 升级:假设你不知道另外的1个小球是轻还是重
我们不知道那个不同的球是轻还是重。这时候我们需要先将9个球分为三组,每组3个。然后称两组,如果平衡,则特殊球在未称的那一组,我们不知道它是轻还是重。但如果不平衡,我们就知道那个不同的球在这两组中,并且我们知道它是轻还是重。然后我们可以按照第一种情况的方法找出特殊的球。
2.3 给你一个天平 没有砝码 给你9个小球 其中7个小球重量是一样的 2个比较轻但是质量也不一样, 怎么快速找到这个两个轻球中的任意一个
第一步,你可以将这9个球分为3组,每组3个球。然后,使用天平对其中的两组进行比较。有两种可能的情况:
-
如果两组的重量一样,那么两个轻球肯定在未称重的那组里。这时候,你需要把这组里的3个球进行比较,方法如下:先比较其中的两个,如果它们的重量一样,那么第三个就是轻球;如果不一样,那么较轻的那个就是轻球。
-
如果两组的重量不一样,那么最轻球肯定在较轻的那组里。这时候,你需要把这组里的3个球进行比较,方法和上面一样。
3 比赛
3.1 9辆车、1个环形赛道,一次只能跑三辆车,赛道没有计时器,无法知道每辆车跑完需要多久,但是可以知道谁先谁后,请问想知道9辆车里面跑得最快的2辆车是那两辆,最少需要跑多少次赛道。
为了找出9辆车中跑得最快的2辆,你需要至少跑5次赛道。下面是解决方法:
-
第一轮:将9辆车分为3组,每组3辆车,分别跑一次赛道。这样,每组将会有一辆最快的车辆(共3辆)。需要跑三次赛道。
-
第二轮:将上一轮的3辆最快的车再次比赛。第一名是所有车中最快的,而第二名和第三名则是潜在的第二快车辆。这一轮需要跑一次赛道
-
第三轮:将第二轮中的第一名和第二名以及第一名所属组中的第二名拿来组成新的一组进行比赛,这一组产生的第一和第二名就是9辆车子的第1、2名次。这一轮需要跑一次赛道
通过这种方式,你可以在最少5次比赛中找出最快的两辆车。
3.2 9辆车、1个环形赛道,一次只能跑三辆车,赛道没有计时器,无法知道每辆车跑完需要多久,但是可以知道谁先谁后,请问想知道9辆车里面跑得最快的4辆车是那两辆,最少需要跑多少次赛道。
// 待定。。。。。
1. **第一轮**:将9辆车分为3组,每组3辆车,分别跑一次赛道。这样,每组将会有一辆最快的车辆(共3辆)。**需要跑三次赛道**。
2. **第二轮**:将上一轮的6辆最快的车(选取每组的前两名即可,这六名中一定有前四名)分为两组,再次比赛两轮,那么。这一轮**需要跑两次赛道**
4. **第三轮**:现在我们已经知道第二轮中两次比赛获胜的那一辆车一定是全局的第一名或者第二名,那么现在只需要比较剩余的四辆车即可,我们可以分成两组,一个组有三辆,一个组有1辆,我们现在只需要比较有三辆车的那个组,第一名的车一定是属于前四名中的第三或者第四名,然后去除这个获胜的车,再将剩余的三辆车进行一轮比赛,获胜的车辆也一定属于第三或者第四名。这一轮**需要跑两次赛道**
通过这种方式,你可以在**最少7次比赛中**找出最快的两辆车。
3.3 64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场?
4 扔鸡蛋
4.1 一栋大楼共及100层,某种类型的鸡蛋从某一楼层及其以上楼层下来时会被打破,从该楼层(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损。现在给你2个完全一样的该种类型的鸡蛋,问:如何通过这2个鸡蛋找到该临界楼层?
源自LC:887. 鸡蛋掉落
经典算法面试题:100层楼扔2个鸡蛋
5 聪明题:教室里有200个人,100个男生,100个女生,现在有两个人能迟到了,问这两个人是相同性别的概率是多少,不同性别呢?
5.1 都是相同性别的概率
- 两个人都是男生: 选择第一个男生的概率是 100/200 = 1/2。 在第一个男生被选择后,选择第二个男生的概率是 99/199。 因此,两个人都是男生的概率是 (1/2) * (99/199) 。
- 两个人都是女生: 选择第一个女生的概率是 100/200 = 1/2。 在第一个女生被选择后,选择第二个女生的概率是 99/199。 因此,两个人都是女生的概率是 (1/2) * (99/199) 。
所以,两个人是相同性别的概率是 99/199。
5.2 性别不同的概率
方法一:要么两个人性别都相同,要么性别都不同,这两个是互斥的,所以性别不同的概率是100/199;
方法二:第一个是男生的概率为1/2,第二个为女生的概率为100/199, 同理,第一个是女生的概率为1/2,第二个为男生的概率为100/199,两种情况加起来为100/199
5.3 除了性别相同还有性别不同,还有其他情况嘛(面试官在给我提示)
在这个特定的问题中,我们考虑的是男性和女性,所以只有两种性别。因此,关于这两个人性别的组合,只有两种可能性:
- 他们的性别相同(即都是男性或都是女性)。
- 他们的性别不同(即一个是男性,一个是女性)。
所以,除了这两种情况,没有其他情况。
5.4 没有其他情况的话,为什么不等于1(暴雷了)
答:但是肯定不是1吧
6 有一个选择题,两个人抛硬币,谁先抛到正面就获胜,获胜的人要穿女装,问先抛硬币穿到女装的概率。
6.1 题解
这个问题是一个关于概率的问题,可以这样来考虑:
假设两个人分别是A和B。我们要计算的是A先抛到正面的概率。在每一轮抛硬币中,有以下几种可能:
- A抛到正面,获胜。
- A抛到反面,然后B抛到反面,之后重复第一轮的情况。
在这个场景中,A和B的硬币是公平的,所以抛到正面的概率是1/2,抛到反面的概率也是1/2。
- A第一次就抛到正面的概率是1/2。
- 如果第一轮都没抛到正面,那么在第二轮中A再次有机会抛到正面的概率是 (1/2) * (1/2) * (1/2)。这是因为第一轮A和B都要抛到反面(各1/2的概率),然后第二轮A抛到正面的概率为1/2。
- 以此类推,如果第n轮是A第一次抛到正面的机会,那么这个事件的概率是 (1/2)^(2n-1)。
所以,A先抛到正面的总概率是这个无限序列的和:
1/2 + (1/2)^3 + (1/2)^5 + (1/2)^7 + …
这是一个无限几何级数,其中每一项都是前一项的(1/2)^2,因此我们可以计算这个级数的和。无限几何级数的和可以用公式 S = a / (1 - r) 计算,其中 a 是第一项,r 是公比。
对于这个级数,a = 1/2,r = (1/2)^2 = 1/4。所以级数的和是:
S = (1/2) / (1 - 1/4) = (1/2) / (3/4) = 2/3
因此,A先抛到正面并因此穿女装的概率是2/3。
6.2 等比数列
7 抛硬币游戏,如果在连续抛出三次正面之前不要停下来,那么我们总计抛硬币的期望次数是?【Markov】
链接:https://www.nowcoder.com/questionTerminal/232add5f42ea49e39e0b3bf793eaf597
来源:牛客网
假设期望是x
假设第一抛是反面,那么就浪费了一步,平均一共需要x+1步(概率是1/2)
假设第一抛是正面,在此基础上如果第二抛是反面,又浪费了,平均一共需要x+2步 (概率是1/4)
在此基础上如果第二抛是正面
假设第三抛反面,浪费,平均一共x+3步(概率是1/8)
假设第三抛正面,完成,只用了3步(概率是1/8)
所以x的期望即x=(1/2)(x+1)+(1/4)(x+2)+(1/8)(x+3)+(1/8)*3
解得x=14
8 抛硬币怎么抛出1/3概率
要使用抛硬币得到1/3的概率,你不能直接通过单次抛掷实现,因为硬币的每次抛掷只能产生两个等可能的结果(正面和反面,各有1/2的概率)。但是,通过组合多次抛掷的结果,你可以构造出1/3的概率。以下是一种实现方法:
方法
-
连续抛两次硬币:
- 如果结果是正面然后反面(记为HT),则计为事件A。
- 如果结果是反面然后正面(记为TH),则计为事件B。
- 如果结果是两次正面(HH)或两次反面(TT),则重新抛两次硬币,直到出现HT或TH。
-
概率计算:
- 两次连续抛硬币有四种可能的结果(HH, HT, TH, TT),每种结果出现的概率都是1/4。
- 事件A(HT)和事件B(TH)各自的概率是1/4。
- 由于我们在出现HH或TT时重新抛硬币,只有当出现HT或TH时才停止,因此最终只考虑这两种情况。
-
得到1/3的概率:
- 在上述情况下,HT和TH的概率都是1/4。当我们只关注HT和TH这两种情况时,它们各自占总有效情况(HT或TH出现)的1/2。
- 但如果我们将其中一种情况(比如HT)定义为成功,而将TH定义为失败,那么成功的概率(HT出现的概率)就是1/2。
- 要得到1/3的概率,我们可以进一步调整规则:如果连续两次抛硬币的结果是HT,则计为成功(1/4概率);如果是TH或HH,则计为失败(1/4 + 1/4 = 1/2概率);如果是TT,则重新抛硬币。
- 在这种调整后的规则下,成功的概率变为 ( \frac{1/4}{1/4 + 1/2} = \frac{1}{3} )。
总结
通过组合连续两次抛硬币的结果并在某些情况下重新抛硬币,可以构造出1/3的概率。这种方法利用了重复试验和有条件的概率来达到非标准概率值。