从9个硬币列表中查找伪造硬币

时间:2013-12-03 10:51:16

标签: algorithm puzzle

刚刚遇到这个简单的算法here,从相同的称重硬币列表中找到奇数硬币(重量很重)。

我能理解,如果我们一次拿3个硬币,那么最小的重量只有两个。

我是如何找到答案的?

我手动尝试一次称重4套硬币,每次称重3套硬币,一次称重两个硬币,一次称重一个硬币。

当然,只有我们一次拿3个硬币才能达到最小步数(2)。

问题是,您怎么知道我们必须拿3个硬币?

我只是想了解如何处理这个难题,而不是做所有可能的组合,然后将答案告诉为2.

1 http://en.wikipedia.org/wiki/Balance_puzzle

3 个答案:

答案 0 :(得分:1)

在每次称重中,可能会发生三种不同的事情,因此使用两种权重,您只能看到九种不同的整体情况。因此,对于每次称量,您需要保证消除至少三分之二(剩余)的可能性。每边称重三个硬币,保证这样做。在每侧称重四个硬币可以消除八个硬币,但也可以只消除五个硬币。

答案 1 :(得分:1)

它可以在信息理论的基础上得到严格证明 - 信息理论是一门非常美丽的学科,它构建了计算机科学的基础。

David MacKay的优秀lectures证明了这一点。 (抱歉,但不记得确切地说是哪一个:可能是前五个中的一个)。

答案 2 :(得分:0)

基本情况是:

你怎么知道我们一次应该拿三枚硬币?

方法:

  1. 首先找到base-case
  2. 这里的基本情况是找到可以在one-weighing 中找到伪造硬币的最大硬币数量。你可以拿两三个硬币从中找到假冒的硬币。所以,最多(两个,三个)=三个。

    因此,这种方法的基本情况是将可用的硬币分成三次。

    2。广义公式为3^n - 3 = (X*2),其中 X是可用的硬币数 n是所需的称量数。 (记住{ {1}}不应该被玷污)。

    考虑X = 9球。 3 ^ n = 21 n

    因此,告诉最小称量数的算法将类似于:

    n is ceiled to 2