当我们只想猜一个数字时,问题很简单。例如,我们想猜x,我们知道最高可能值是n。我们可以进行二进制搜索,其复杂度为O(log n)。
但是,我发现了这个问题的变化:
给定0< x< n&0< y< m,如何找到查询次数最少的x + y?
假设猜测是z,我们可以要求提问者与其他值进行比较,并且他将告诉z与另一个值之间的关系 - 即小于,等于或大于。可能的比较是:
(1)比较x和z。
(2)比较y和z。
(3)比较x + y和z。
在我看来,我们可以在(x + y)上进行二元搜索。因此,时间复杂度为O(log(m + n))。这比查找x更好,然后找到y,其复杂度为O(log m + log n)= O(log mn)
然而,我很好奇是否有比在x + y上进行二元搜索更好的解决方案。
非常感谢你的帮助。
编辑: 因此提问者首先想到数字x和数字y,然后他问回答者x + y的值是多少。回答者可以进行三个查询,如上所示。我的问题是,回答者如何以最少的查询数找到答案。
答案 0 :(得分:3)
当每种可能性具有相同的概率时,二进制搜索是最佳的。这是x的情况,对于y,但不是x + y的情况。平均得出最少猜测的策略将类似但不完全是二元搜索。
通过二分搜索,所有可能性同样可能
probability | |
| [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
|_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
我们猜中间,并丢弃一半可能的答案:
probability | V X X X X X X X X X |
| [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
|_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
所有的回答仍然是可能的,所以我们可以简单地说明。
当找到x + y,其中x和y各自从均匀概率范围中随机选择时,每个x + y的概率不是同等可能的。
probability | V |
| [] |
| [] [] [] |
| [] [] [] [] [] |
| [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] [] [] |
|____[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
显然,猜测中间位置仍然是最好的猜测:
probability | V X X X X X X X |
| [] |
| [] [] [] |
| [] [] [] [] [] |
| [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] |
| [] [] [] [] [] [] [] [] [] [] [] [] [] |
|____[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_[]_|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
但不直观的是接下来要猜测的地方。在上图中,8之后的最佳猜测是5或6(不是4),但我不确定如何准确计算。如果我搞清楚,我会告诉你的。
v = lower_bound
u = upper_bound
t = probability(v)
s = probability(u)
r = min(s,t)
p = guess
(p-v)r+(p-v)^2/2 = (u-p)r+(u-p)^2/2
pr-rv+(p^2-pv+v^2)/2 = ur-pr+(u^2-up+p^2)/2
2pr-2rv+p^2-pv+v^2 = 2ur-2pr+u^2-up+p^2
2pr-2rv+p^2-pv+v^2-2pr+up-p^2 = 2ur+u^2
2pr+p^2-pv-2pr+up-p^2 = 2ur+u^2+2rv-v^2
-pv+up = 2ur+u^2+2rv-v^2
(u-v)p = u^2+2ur+2rv-v^2
p = (u^2+2ur+2rv-v^2)/(u-v)
不,那也是错的。仍在努力。
[Niklas B.观察到这个答案中的所有内容都假定x和y都是从它们的范围内均匀地挑选出来的。如果这不是一个安全的假设,那么是的,二进制搜索平均速度最快]