【发布时间】:2014-02-21 01:22:52
【问题描述】:
当我们只想猜一个数字时,问题很简单。例如,我们想猜测 x,我们知道可能的最大值是 n。我们可以做二分查找,复杂度是O(log n)。
但是,我发现了这个问题的变体:
给定0 假设猜测是z,我们可以让提问者与另一个值进行比较,他会说出z和另一个值之间的关系——即小于、等于或大于。可能的比较是:
在我看来,我们可以对 (x+y) 进行二分搜索。因此,时间复杂度为 O(log(m+n))。这比先找到 x,然后再找到 y,复杂度为 O(log m + log n) = O(log mn) 但是,我很好奇是否有比在 x+y 上进行二分搜索更好的解决方案。 非常感谢您的帮助。 编辑:
所以提问者首先想到了数字 x 和数字 y,然后他问回答者 x+y 的值是多少。回答者可以进行三个查询,如上所示。我的问题是回答者如何以最少的查询找到答案。
(1) 比较 x 和 z。
(2) 比较 y 和 z。
(3) 比较 x+y 和 z。
【问题讨论】:
-
二分查找复杂度 O(log(n))
-
Given 0<x<n and 0<y<m, how to find x+y with the smallest number of queries?什么?您是否试图找到任何两个数字,使得它们的总和等于具有这些约束的其他数字? -
日志的有趣之处:log (m n) = log m + log n
-
@FiveFiftyFive:当每个可能性具有相等的概率时,二分搜索是最佳的。
x和y的情况是这样,但x+y的情况不是。最佳将类似于但不完全是二进制搜索。仍在研究细节。 (另一方面,我想到的最佳搜索仍然是 O(log(m+n)),它平均而言会更快。 -
可能不会。任何智能策略都不应该需要超过两个“相等”的响应,通过我前面提到的技术的相当懒惰的应用,它给出了 lg (m + n) - c lg lg (m + n) 最坏情况下限一些不太大的 c.如果这个差距不能缩小到 O(1),我会感到惊讶。
标签: algorithm time-complexity binary-search