关于算法:找到两个不同的硬币

Finding the two different coins

问题是:

你有n个硬币,其中n=2^k表示整数k,这样n?两个硬币是一样的重量和两枚硬币比其他硬币重。两枚较重的硬币可能重量相同,或者它们的重量可能不同。你有天平:你可以放任意数量的硬币在天平的每一边,它会告诉你,如果两边的重量相同,哪一边更轻,如果它们不相同。概述一种使用O(log n)称重法寻找两个较重硬币的算法。

如果只有一枚硬币不同于其他硬币,我知道答案。我也发现了类似的问题,不同的硬币在哪里更重。

如果给N个硬币,其中一些更重,找到重硬币的数量?

有什么帮助吗?


假设你把硬币分成两堆2K-1硬币。

  • 如果两个硬币的重量相同,那么你就知道每一个硬币必须包含一个较重的硬币,并且两个较重的硬币的重量相同。在每堆纸上使用"一个较重的硬币溶液"。
  • 如果两个桩的重量不一样,用2K-2硬币将较轻的桩分成两个桩。这里的想法是,我们还不知道较重的那一堆是否都有重硬币,或者每一堆都有一个(而较重的那一堆有最重的硬币),我们将用第二个砝码来找出哪个。
    • 如果这两堆硬币的重量不相同,那么第一次称重的两堆硬币必须各有一枚重硬币(两个硬币的重量不同)。在每堆纸上使用"一个较重的硬币溶液"。
    • 如果这两堆硬币的重量相同,那么两个重的硬币必须放在一堆更重的2K-1硬币中。再回到那堆。(稍后我们将了解两枚重硬币的重量是否不同)。
  • 现在,为了证明称重的数量。

    假设我们从不使用"一个重硬币解决方案",这个设置将在最坏的情况下需要两个称重来将搜索空间减半。因此,这里的称重次数为2 log n

    请注意,我们最多使用"一个较重的硬币解决方案"两次。因此,上述两个步骤中的松散上界是2 log n,加上"一个较重的硬币解决方案"的称重次数的2倍,得到了我们的2 log n + 2 * O(log n),仍然是O(log n)