二进制搜索模式实现细节/使用问题

时间:2016-05-31 19:54:55

标签: algorithm big-o binary-search

以下SO url为Big O表示法提供了一些很好的实际示例:

What does O(log n) mean exactly?

我特别感兴趣的是以下为二进制搜索提供的示例:

“O(log n):给定一个人的姓名,通过在您尚未搜索的书籍部分中间选择一个随机点来查找电话号码,然后检查该人的姓名是否在然后在书的一部分中间重复这个过程。这是一个人名的二分法。(“

有一些事情我不清楚:

  • 教科书二元搜索是否从数组的确切中点开始搜索?如果数组中有偶数个项目,教科书二进制搜索算法是否应随机选择较低或较高的项目?

  • 教科书二进制搜索是否对特定数据点进行中途搜索,还是搜索群集的数据点以获得更高的效率?或者二元搜索模式是否支持这些方法之一?

  • 二进制搜索可以应用于已排序或未排序的数组吗?或者是否始终建议在执行二进制搜索之前以编程方式对数组进行排序?

1 个答案:

答案 0 :(得分:0)

有些事情没有正确解释这个例子。首先,假设您正在搜索名称的字典。假设你正在寻找“约翰”。第(n / 2)页为您提供以字母L开头的名称(比如第X页)。因此,您忽略了从此页面开始的所有内容,因为您知道此页面和其他页面无法满足您的搜索要求。现在,您的搜索集将缩减为从第1页到第X页的搜索。继续执行您每次选择页面时忽略搜索集的n / 2项的步骤。

所以,根据我给出的解释:

  

1。)如果n是偶数/奇数,只需选择你得到的n / 2。你要么在下一次迭代中考虑第1页到(n / 2)-1(或)页面(n / 2)+1到n。所以,这里没有跳过任何元素的风险。

     

2.。)在每次迭代中,您都会考虑整个搜索集。从迭代i到i + 1的搜索集之间的差异是,   元素数量将减少一半。

     

3.。)BS的先决条件之一是我们应该考虑一个排序的项目列表。这就是我在解释中使用字典的原因。

此操作为O(logn)的原因是每次将项目列表减少一半。想象一下,你在列表中有32个项目。这里找到答案所需的迭代次数是5(在第一次迭代中32次减少到16次,在第二次迭代中减少到16次等等)。如您所见,32和5之间的关系是 log 32(base 2)= 5