类似于有缺陷的球问题,你会得到n个球,但是有不明数量的缺陷球和好球。至少有一个好球和至少一个有缺陷的球。所有好球的重量都相同,所有有缺陷的球重量相同,但是好的球重量比有缺陷的球重,并且给予平衡,将有缺陷的球与好球分开。
我对解决方案的天真尝试是将第一个球放在一个列表中,并遍历整个列表,相应地将它们放在各自的列表中。然而,这显然是O(n)解决方案。我想知道是否还有另一种更有效的方法?
答案 0 :(得分:3)
在最坏的情况下,您找不到比O(n)称重更好的解决方案。有2 ^ n个可能的结果(2 ^ n种方式分配"良好"或"坏"每个球)。每次称量都有三种可能的结果,因此m
称量可以区分3^m
可能的结果。
因此,要区分所有2 ^ n个可能的结果,至少需要log3(2 ^ n)权重,这等于n * log3(2)= O(n)。
因此,在最坏的情况下,最简单的解决方案(拿一个球并对其他每个球进行称重)是最好的解决方案。
注意:此证明基于与比较排序不能比O(n * logn)渐近更好的证据相同的想法。