无法理解指数搜索的工作原理

Posted

技术标签:

【中文标题】无法理解指数搜索的工作原理【英文标题】:Trouble in understanding how Exponential Search works 【发布时间】:2017-09-02 12:39:04 【问题描述】:

我目前正在为考试学习和学习搜索算法。我了解线性、二进制和插值搜索,现在尝试了解指数搜索。但是网上有不好的来源,如果有解释对我来说很复杂..希望你能澄清一下算法吗?

编辑(尝试纠正我的错误):

假设我们有一个数组,我们在数组中搜索19

Index i  0  1   2   3    4    5    6
         2  7  13  19   55   92   99

我们首先尝试找到范围(我们在哪个位置划分数组)

2^0 : i=1: A[1] > 19
2^1 : i=2: A[2] > 19
2^2 : i=4: A[4] < 19

现在我们知道我们需要从索引i=0 搜索到i=3

现在我们使用二分查找来查找元素19

我们当前拥有的子数组是

Index i  0  1   2   3   
         2  7  13  19   

二分搜索我们在中间划分,所以我们有数组

13 19

现在在中间再次划分。 19 大于 13 并且 19 现在是数组中的唯一元素。我们完成了,我们找到19

现在正确吗?

【问题讨论】:

【参考方案1】:

步数应该增加在搜索的指数阶段。

您必须检查数组的第一个元素,然后是第二个,然后是第四个,然后是第 8 个,然后是第 16 个,依此类推,直到检查的元素(编号为 2^k)变得大于(或等于)要搜索的值。

此时你知道搜索到的值在2^(k-1)..2^k范围内,并在这个范围内开始二分查找

请注意,指数阶段允许快速找到包含搜索值的范围。

附:对于从零开始的数组编号,检查第 0 个索引很方便,然后开始索引序列 1,2,4,8,16...

【讨论】:

所以我正确地完成了第一步(找到范围),对吧?找到范围后,我按照您所说的那样使用二进制搜索(这意味着我将子数组划分为中间等等......对吗?)。 不,你做了相等的步骤(增加 i)- 2,2,2,但指数搜索需要 1,2,4,8... 1.你很粗心:A[1] 和 A[2] 19 2. 我们知道范围 2..4。我们不需要检查左侧部分【参考方案2】:

指数搜索是一种算法,用于搜索无限数组或未知大小的数组。它有两个步骤:

1) 搜索第一个元素的位置大于或等于该值 2) 从头到尾进行二分查找

第一步允许您定义二进制搜索的范围。并且由于指数增长的因素,它被称为指数搜索。

【讨论】:

以上是关于无法理解指数搜索的工作原理的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询优化器工作原理解析

MySQL查询优化器工作原理解析

无法确定此功能的工作原理

分布式搜索引擎ElasticSearch---ElasticSearch进阶使用深入理解搜索技术集群架构原理

搜索引擎的原理你知道吗?

Javascript避免全局变量 - 无法得到它的工作原理