刚刚遇到这个简单的算法here,从相同的称重硬币列表中找到奇数硬币(重量很重)。
我能理解,如果我们一次拿3个硬币,那么最小的重量只有两个。
我是如何找到答案的?
我手动尝试一次称重4套硬币,每次称重3套硬币,一次称重两个硬币,一次称重一个硬币。
当然,只有我们一次拿3个硬币才能达到最小步数(2)。
问题是,您怎么知道我们必须拿3个硬币?
我只是想了解如何处理这个难题,而不是做所有可能的组合,然后将答案告诉为2.
答案 0 :(得分:1)
在每次称重中,可能会发生三种不同的事情,因此使用两种权重,您只能看到九种不同的整体情况。因此,对于每次称量,您需要保证消除至少三分之二(剩余)的可能性。每边称重三个硬币,保证这样做。在每侧称重四个硬币可以消除八个硬币,但也可以只消除五个硬币。
答案 1 :(得分:1)
它可以在信息理论的基础上得到严格证明 - 信息理论是一门非常美丽的学科,它构建了计算机科学的基础。
David MacKay的优秀lectures证明了这一点。 (抱歉,但不记得确切地说是哪一个:可能是前五个中的一个)。
答案 2 :(得分:0)
基本情况是:
你怎么知道我们一次应该拿三枚硬币?
方法:
base-case
。 这里的基本情况是找到可以在one-weighing
中找到伪造硬币的最大硬币数量。你可以拿两三个硬币从中找到假冒的硬币。所以,最多(两个,三个)=三个。
因此,这种方法的基本情况是将可用的硬币分成三次。
2。广义公式为3^n - 3 = (X*2)
,其中 X是可用的硬币数, n是所需的称量数。 (记住{ {1}}不应该被玷污)。
考虑X = 9球。 3 ^ n = 21 和n
。
因此,告诉最小称量数的算法将类似于:
n is ceiled to 2