是二进制搜索O(log n)还是O(n log n)?

时间:2016-05-14 14:42:13

标签: search binary runtime big-o

我遇到的时间是O(log n),时间是O(n log n)。这也是一个非常受欢迎的采访问题。那么当面试官盲目地询问你二元搜索的运行时间是什么时(没有上下文)?你应该怎么说?

2 个答案:

答案 0 :(得分:4)

听起来像一个技巧问题,因为没有上下文。看起来像面试官想要在二元搜索是好的时候覆盖案例,而当它不是。

因此,当您对元素列表进行排序并搜索单个元素时,二进制搜索非常有用,在这种情况下,它的成本为O(logn)

现在,如果我们没有排序数组,则排序成本为O(n logn),然后您可以应用第一个案例。在这种情况下,最好将值放在集合或映射中然后搜索(执行时间O(n)用于插入,O(1)用于搜索。)

这两种情况都依赖于单一搜索。二进制搜索不是用于在单次执行中搜索n个元素(或根据n的任意数量的元素,如n/2元素,n/4或甚至logn元素 - 用于修复号码确定)。对于这种情况,有更好的方法(集合和地图)。

答案 1 :(得分:1)

O(log n),对于平均和最差情况。从未听说有人声称它是O(n log n)。