找到不同重量球所需的最小重量是多少?

时间:2010-11-13 07:54:25

标签: algorithm puzzle

如果有9个球,其中1个球的重量不同,则需要至少2个重量才能找到奇数球。   如果有27个球,则需要3次机会。

  

9 - > 3 pow 2 - > 2次机会。

     

27 - > 3 pow 3 - > 3次机会。

问题:如果给出了奇数球所需的最小重量是什么

  

3 pow 45 - 3 pow 40球

无法使用计算器。我认为,需要推导出一些方程/公式。

任何人都可以破解这个难题吗?

3 个答案:

答案 0 :(得分:3)

如果3^x = N球和x -- number of weighsx = log3(N);

3^x = 3^45 - 3^40;
3^x = 3^40 * (3^5 - 1);
x = log3(3^40) + log3(3^5 - 1) = 40 + log3(242);
real_x = ceil(x);

答案 1 :(得分:2)

得出答案的另一种直观方式是问自己这个问题:

一次加权最多可以检查多少个球?

答案是3.原因是因为如果比较3个中的两个球,你可以立即找到不同重量的球(无论是更重还是更轻),或者你发现它们的重量相同,通过消除过程导致第三球的重量不同。

结果,可以将N个球分成3个组加上M的余数组(0 <= M <3)。每组3个应用一个这样的加权将消除所有球的2 / 3rds。这意味着你留下了一组新球,你需要找到一个不同重量的球,这组球的数量等于地板(N / 3)+ M.

通过对这个减少的球组应用相同的程序,您可以在一般情况下找到具有不同重量的球,最多为天花板(log(N)/ log(3))步骤。 ceiling()语句的原因是你最终可能会用完3个组,并留下一组2个球,需要额外增加1个。 (如果最后一组只有一个球,你不需要称它来推断它必须是一个不同重量的球。更准确地说,所需的权重数量似乎是最多一层(log(N)/ log(3)) )+ 1;从那里简单地观察到如果log(N)/ log(3)是整数,则不需要1个额外的加权导致更精确的上限值(log(N)/ log(3))。)

答案 2 :(得分:0)

根据您的示例,我们必须推断不同重量的球要么更重,要么已知更轻。为简单起见,我认为它更重。

首先让我们看看为什么可以在45次称重中做到这一点:对于3n个球,一个可以称重n与n,使n不称重,并减少到n个球。这样做40次,减少到一批(3 ^ 45-3 ^ 40)/ 3 ^ 40 = 3 ^ 5-1 = 242个球。沉重的球在那里的某个地方。添加一个已知的普通球,所以你有243(再次为3的力量)并继续另外五次称重,之后你就会有重球。

接下来让我们看看为什么它无法在44次或更少的重量下完成:每次称重都会为您提供一条信息,可以将其视为0,1或2.0的“重球”在左侧“,1表示重型球在右侧”,2表示“重型球在未经称重的批次中”。无论在相同数量的球上对多少球进行称重,这都是正确的。因此,任何44次称重的结果可以被视为44位数的序列 - 0,1,和2。使用44次称重,任何策略有3 ^ 44种可能的结果。但是你有超过3 ^ 44个球,所以你不能保证找到一个使用一个只产生3 ^ 44个不同答案的实验过程。从信息理论的角度来看,“正确答案”中有更多的信息可以通过44次称重产生。