我目前正在学习考试和学习搜索算法。我理解线性,二进制和插值搜索,现在尝试理解指数搜索。但是互联网上有不好的消息来源,如果有解释对我来说非常复杂..我希望你能澄清算法?
编辑(试图纠正我的错误):
所以,让我们说我们有数组,我们在数组中搜索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
现在是否正确?
答案 0 :(得分:2)
在搜索的指数阶段,步骤应该增加。
你必须检查数组的第一个元素,然后是第2个,然后是第4个,然后是第8个,然后是第16个,依此类推,直到被检查的元素(具有数字2^k
)变得大于(或等于)要搜索的值
此时您知道搜索的值在2^(k-1)..2^k
范围内,并在此范围内开始二进制搜索
请注意,指数阶段允许快速查找包含搜索值的范围。
P.S。对于从零开始的数组计算,检查第0个索引是方便的,然后启动索引序列1,2,4,8,16 ......
答案 1 :(得分:0)
指数搜索是一种算法,用于搜索大小未知的无限数组或数组。它有两个步骤:
1)搜索大于或等于该值的第一个元素的位置 2)从开头到找到的结尾进行二进制搜索
第一步允许您定义二进制搜索的范围。并且由于指数增长因子,它被称为指数搜索。