为什么二进制搜索O(log N)?

时间:2016-09-17 20:18:38

标签: algorithm binary-search

以下是我的想法:

您首先要有N个元素。

但你不是经历过每一个人吗?

说我有

{1, 2, 3, 4, 5, 6, 7, 8, 9}我希望找到4

第一步是查看5,我们看到4 < arr[5]。然后,我们有 {1, 2, 3, 4, 5},中间是3,我们看到4 > arr[2],因此我们留下了{3, 4, 5}

现在我们将获得4

但那只是3步!我不明白为什么第一次搜索需要N元素,当我们查看(N-1)/2元素时,这是一步?

修改!!!

以下是我所教的内容:

在搜索空间中搜索1:n个元素

搜索2:搜索空间中的n / 2个元素

搜索3:搜索空间中的n / 4个元素

... 搜索i:搜索空间中的1个元素。

搜索我有n /(2 ^ [i-1])个元素,因此你解决了我然后你得到了

i = log(n)+ 1。

我不明白的事情:

你有n个元素,我同意,但是你没有搜索所有这些元素,你只搜索1个元素,那你为什么要算所有n?

1 个答案:

答案 0 :(得分:4)

二进制搜索(需要在具有O(1)随机访问读取的数据结构中的排序数据)的主要原因是O(log N)是对于任何给定数据集,我们首先查看最中间的元件。

如果它比我们正在寻找的元素大,我们知道我们可以忽略从那一点到结尾的任何事情。如果它更小,我们可以忽略从头到尾的任何东西。这意味着,对于每一步,我们都会有效地将剩余的一半缩小。

通过在每一步中将问题设置为一半,我们可以(相对)轻松地看到从N个元素到单个元素是O(log N)步骤。

我们之前没有在你的例子中终止的原因是,即使看起来好像我们正在扫描第一个元素,我们实际做的唯一事情就是“得到数组的长度“和”访问最中间的元素“(所以,我们永远不知道我们正在寻找的元素是否包含在数组中)。