关于拼图:找到从一组n个球中找到缺陷球所需的最小权重数的算法

Algorithm to find minimum number of weightings required to find defective ball from a set of n balls

好吧,这是一个我经常遇到的难题-给定一组12个球,其中一个是有缺陷的(它的重量不是小就是多)。您可以称三次,找出有缺陷的,并告诉谁的重量少或多。

这个问题的解决办法已经存在了,但是我想知道我们是否可以从算法上确定,如果给定一组"n"球,您需要使用光束平衡来确定哪个球有缺陷,以及如何使用(更轻或更重)。


这里可以找到杰克·韦特的一个很好的算法。

  • http://www.cut-the-knot.org/blue/oddcinoproblems.shtml

(如案例n所述,形式为(3^k-3)/2,但可概括为其他n,见下文所述)

这里有一个较短的版本,可能更易读的版本

  • http://www.cut-the-knot.org/blue/oddconissuesshort.shtml

对于形式(3^k-3)/2中的n,上述解决方案完全适用,所需的最小称重次数为k。

在其他情况下…

对所有n个变量采用jack-wert算法。

为了修改以上所有n个算法,您可以尝试以下操作(不过,我还没有尝试证明正确性):

首先检查n是否来自(3^k-3)/2。如果是,应用上面的算法。

如果没有,

如果n=3t(即n是3的倍数),则可以找到最小m>n,这样m的形式为(3^k-3)/2。所需的称重次数将为k。现在形成1、3、3^2、…、3^(k-2)、z组,其中3^(k-2)

注:对于任意z,我们还需要推广方法A(当我们知道硬币是否重或轻时)。

如果n=3t+1,尝试求解3t(保持一个球在一边)。如果你在3T中找不到那个奇怪的球,你放在一边的那个球是有缺陷的。

如果n=3t+2,形成3t+3的组,但有一个组没有一个球组。如果你到了必须旋转单球组的阶段,你知道有缺陷的球是两个球中的一个,然后你可以将这两个球中的一个球与已知的一个好球(从其他3T球中)进行称重。


三分法!:)

说明:给定一组n个球,将其细分为3组n/3球的a、b和c。

比较A和B。如果相等,则缺陷球在C中。等。

所以,你的最小次数是你能用n除以3的次数(对不起,我不知道这个词的英文单词)。


您可以使用总体规划算法:http://www.inf.ed.ac.uk/teaching/courses/plan/