了解指数搜索的工作原理方面的麻烦



我目前学习考试和学习搜索算法。我了解线性,二进制和插值搜索,现在尝试了解指数搜索。但是互联网上有不良的来源,如果有解释对我来说非常复杂。.我希望您可以澄清算法?

edit(tryd纠正我的错误):

所以假设我们有数组,我们在数组中搜索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=0i=3

现在我们使用二进制搜索查找元素19

当前的子阵列是

Index i  0  1   2   3   
         2  7  13  19   

二进制搜索我们在中间分开,所以我们有数组

13 19

现在在中间再次分裂。19大于1319仅是数组中的元素。我们完成了,我们找到19

现在正确吗?

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

您必须检查数组的第一个元素,然后检查第二个元素,然后检查第4个,然后是第4个,然后是第16个等等,直到检查元素(具有数字2^k)比搜索的值更大(或等于)。

在这一刻,您知道搜索值在2^(k-1)..2^k范围内,并在此范围内启动二进制搜索

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

P.S。对于基于零的数量数字,请检查0-3索引,然后开始索引序列1,2,4,8,16 ...

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

1)搜索一个大于或等于值的第一元素位置2)从一开始到找到的末端进行二进制搜索

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

最新更新