无法理解指数搜索的工作原理
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) 从头到尾进行二分查找
第一步允许您定义二进制搜索的范围。并且由于指数增长的因素,它被称为指数搜索。
【讨论】:
以上是关于无法理解指数搜索的工作原理的主要内容,如果未能解决你的问题,请参考以下文章