这可能是一个愚蠢的问题,但是有没有人知道二进制搜索是渐近最优的证据?也就是说,如果给出一个排序的元素列表,其中对这些对象的唯一允许操作是比较,那么如何证明搜索不能在o(lg n)中完成? (顺便说一下,这只是lg n的一小部分。)请注意,我将此限制为只允许操作的唯一操作的元素,因为有一些众所周知的算法可以在期望值上击败O(lg n)如果你被允许对数据进行更复杂的操作(例如,参见插值搜索)。
答案 0 :(得分:4)
来自here:
答案 1 :(得分:1)
逻辑很简单。假设我们有n
个不同的排序元素数组。
n <= 2
。否则,如果我们有3个元素(a, b, c
)并且我们的算法有2个可能的结果,则永远不会选择3个元素中的一个。n <= 4
。k
比较足够n
应为n <= 2^k
。反转最后一个不等式,你将得到对数:k >= log(2, n)
。
答案 2 :(得分:1)
正如Nikita所描述的那样总是比O(log n)更好。
即使您允许进行一些额外的操作,它仍然不够 - 我确信可以准备元素序列,其中插值搜索将比二分搜索更糟糕。
我们可以说插值搜索更好只是因为:
所以答案是 - 这完全取决于我们对传入数据集的额外了解。