发现丢失的瓶子(算法问题)
-
28-09-2020 - |
题
问题如下:
科学家创造了一种叫做化合物A的新化合物,它将在与化合物B混合后10天爆炸。该化合物A储存在带有<跨度级=“数学容器”的架子上的标签瓶中。 > $ N-1 $ 瓶子的非反应材料,科学家不知道哪个是化合物A. <跨度类=“MATH-CATTEMANT”> $恰好有一瓶复合A.架子上的N $ 瓶子。科学家拥有<跨越类=“数学集装箱”> $ O(log(n))$ 烧杯充满了化合物b的烧杯。如何确定哪个 $ n $ 瓶子是复合A的时间,完全是10天的时间吗?
我有点卡住,因为我不知道在10天内不知道如何缩小特定瓶子。很明显,您只需将瓶子的前半部分施加到第一个烧杯,然后如果它没有反应,则知道所需的瓶子是下半部分等。但我如何缩小它而不见证前几次测试的结果?
我们需要创建一系列爆炸的东西,帮助我们缩小它的哪一个(允许在N / 4中说,然后n / 10,然后n / 100等)。 我怎么做这个?
解决方案
这是一个经典的问题,我以前看到的陷入困境而不是CS问题(有一些固定的 $ n $ 和固定数量的烧杯),虽然我不记得它的任何来源。
您可以解决如下: 从 $ 0 $ 到 $ n-1 $ ,并从 $ 1 $ 到 $ \ lfloor \ log_2(n-1)\ rfloor + 1 $ 表示所需的比特数数字 $ 0 $ 到 $ n-1 $ 在二进制中)。
现在为每个瓶子,请执行以下操作:让 $ x $ 是瓶子的标签。对于每个 $ i $ ,使得 $ 1 $ “> $ i $ $ x $ 的二进制表示中的位置,在烧杯 $ i $ 。现在经过10天,爆炸的烧杯将恰好拼出二进制中爆炸瓶的数量。
不隶属于 cs.stackexchange