给出一系列橡胶球,例如:除了一个球之外,所有球都是相同的重量。什么是找到具有独特重量的球的最有效方法,并且需要将球放在秤上的最少量?
答案 0 :(得分:1)
您可以通过二进制搜索算法(O(logn))轻松完成。你只需将球组分成两组。然后选择一个并划分它们。称重它们。如果桩相等,则球在另一堆中。如果它们不相等,则继续这两个堆的过程。选一个,分开并称重。你最终会分离出不同的球。
答案 1 :(得分:0)
我相信你的意思是你只能使用比例来了解不同的球。以下是我的解决方案。
你有3个案例:
Case 0: if there is only `1` ball, then this is the desired ball.
Case 1: the number of balls is divisible by 3.
Divide the balls into 3 equal sets {1, 2, 3}.
weigh 1 and 2 ==> if equal, recurse on 3
if not, weigh 1 and 3 ==> if equal recurse on 2
if not recurse on 1
Case 2: the number of balls leave a remainder of 1 when divided by 3.
Take one ball out, call that ball x.
You want to check if x is the desired ball or not.
Take 2 more balls, call them y and z.
Weigh y and z ==> if equal, weigh x and y ==> if equal, x is not the desired ball. This is case 0 or 1 on the set of balls without x.
if not, x is the distinct ball
if not, weigh x and y ==> if equal, z is the distinct ball
if not, y is the distinct ball.
Case 3: the number of balls leave a remainder of 2 when divided by 3.
Take two balls out, call them x and y.
Take one more ball, call it z.
weigh x and y ==> if equal, weigh x and z ==> if equal this is case 0 or 1 on the remaining balls without x and y.
if not, z is the distinct ball.
if not, weigh x and z ==> if equal, y is the distinct ball.
if not, x is the distinct ball.
答案 2 :(得分:0)
让我们为8
球做:
留下2分,然后称重3 - 3
:你知道哪一组3
有不同的球,或者你知道剩下的那个是不同的,在这种情况下,还有一个加权会找到它
要从3
中找到它,请留出一个并称重1 - 1
。同样,无论如何,你都会发现它,我们在2
权重中做到了,击败了二元搜索。
对于16
,您可以在3
中执行此操作:
退出6
。比较5 - 5
。如果相等,我们可以从2
权重中遗漏的那些中找到它。
我们可以通过比较5
然后2 - 2
来找到1 - 1
。
一般情况下,如果我们有3^x <= n < 3^(x + 1)
个球,那么我们可以在x + 1
中进行,我认为这是最佳的,但没有证明:
3^1 <= 8 < 3^2 => answer = 2
3^2 <= 16 < 3^3 => answer = 3
这是因为我们总是可以将球的数量分成3组,大小为k, k, k
; k, k, k + 1
或k, k + 1, k + 1
,然后可以比将其分成两半更快地递归解决。
我不确定这是否是最佳的,但它胜过经典的二元搜索。