Algorithm to find counterfeit coin amongst n coins
所以这是一个经典的问题,在一组硬币中找到一个伪造的硬币,只用一个天平。为了完整性,下面是这样一个问题的例子:
A well-known example has nine (or fewer) items, say coins (or balls), that are identical in weight save for one, which in this example is lighter than the others—a counterfeit (an oddball). The difference is only perceptible by weighing them on scale—but only the coins themselves can be weighed. Is it possible to isolate the counterfeit coin with only two weighings?
我们正在处理的情况是,只有一枚硬币是伪造的,我们知道它是如何伪造的(即,我们知道它更重/更轻)。
我的问题是,有没有一个通用的有效算法来解决这个问题的广义版本的
让我们说,你有N个硬币。
制作3组硬币,每组包含地板(n/3)硬币。如果有剩余的硬币(n%3),将它们放在最后一组(第三组)。注意前两组硬币的数量相同。
将第一组与第二组称重。如果他们是不平等的,那么我们必须从其中一个群体中找出罪犯(假币)。所以我们的解决方案空间在第一次称重后减少到n/3。
如果它们相等,那么第三组中的假币最多有(n/3)+2枚。
递归地这样做,让我们在CEIL(Log_3_uu(n))时间中找到伪代码。
除非您对输入有任何额外的信息,否则
我已经使用了这个代码,但是有时它被关闭了1((:
1 2 3 4 5 6 7 8 9 10 11 | def how_many_measurements(n): import math if n<2: x = 0 elif n >= 2 and n<=4: x = 1 elif n>4 and n<12: x = 2 else: x= math.ceil(math.log((2*n+1),3)) return x |