从一组n个球中找出有缺陷的球

时间:2015-10-14 19:43:30

标签: algorithm

类似于有缺陷的球问题,你会得到n个球,但是有不明数量的缺陷球和好球。至少有一个好球和至少一个有缺陷的球。所有好球的重量都相同,所有有缺陷的球重量相同,但是好的球重量比有缺陷的球重,并且给予平衡,将有缺陷的球与好球分开。

我对解决方案的天真尝试是将第一个球放在一个列表中,并遍历整个列表,相应地将它们放在各自的列表中。然而,这显然是O(n)解决方案。我想知道是否还有另一种更有效的方法?

1 个答案:

答案 0 :(得分:3)

在最坏的情况下,您找不到比O(n)称重更好的解决方案。有2 ^ n个可能的结果(2 ^ n种方式分配"良好"或"坏"每个球)。每次称量都有三种可能的结果,因此m称量可以区分3^m可能的结果。

因此,要区分所有2 ^ n个可能的结果,至少需要log3(2 ^ n)权重,这等于n * log3(2)= O(n)。

因此,在最坏的情况下,最简单的解决方案(拿一个球并对其他每个球进行称重)是最好的解决方案。

注意:此证明基于与比较排序不能比O(n * logn)渐近更好的证据相同的想法。