查找0中的所有重币(log ^ 2(n))

时间:2014-02-16 06:53:27

标签: algorithm master-theorem

假设您获得了n个硬币,其中一些是沉重的,其他的则是硬币 光。所有重币都具有相同的重量,所有的轻币都是如此 重硬币的重量严格大于轻硬币的重量。 已知至少一个硬币是轻的。给你一个平衡, 使用它你可以衡量一个硬币子集与另一个不相交的子集 的硬币。显示如何确定使用重币的数量 O(log2 n)称重。

1 个答案:

答案 0 :(得分:0)

我想这肯定是问题的概括,你有8个硬币,其中一个很轻。因此,您可以执行一种二分搜索,以便使用一对天平来找到最轻的硬币。然而,奇怪的是你应该同时找到几个轻币。在这种情况下,这似乎与log2 n不成比例。

请参阅下面的示例以了解我的观点。 在8个硬币的情况下,其中一个是轻的。您应该遵循以下三个步骤:

步骤1)将样品分成两部分,找到最轻的部分。 => 1加权。 [你有一个4个硬币更轻的样本]

步骤2)将普通程序中最轻的部分分开并对这些部分进行加权以找到最轻的部分。 => + 1加权[你有2个硬币的样本]

步骤3)现在你只有两枚硬币。你只需要给它们加重以找到最轻的。

当然,对大小为n的样本的推广是微不足道的。

这与log2 n一起扩展的证明遵循二进制搜索证明。

但是,如果轻硬币的数量与1不同,则无法仅对样本中最轻的部分进行聚焦。 [免责声明:也许我错了,但很难说这会与log2 n一起扩展。例如,考虑轻型硬币数量与n(硬币数量)的比例]

实际上,解决这个问题的最佳方法是只用两个权重找到最轻的硬币:

步骤1)将样品分成3份。第一部分有三个硬币,第二部分有三个硬币,最后一部分只有2个。

步骤2)对第一部分和第二部分进行加权。有三种情况:

a)第一部分较轻。

b)第二部分较轻。

c)第一和第二部分的重量相同。

如果(a或b)有两个人。如果它们具有相同的重量,则另一个未加权的是较轻的。另一方面,如果他们没有相同的重量,其中一个是较轻的

如果(c)只是加权两个硬币以找到较轻的硬币。

这也可以概括,但泛化要复杂得多。