他理解斐波那契搜索

时间:2017-09-03 15:00:08

标签: arrays algorithm search fibonacci

在互联网上我只找到算法的代码,但我需要首先以文本的形式理解,因为我无法从代码中理解事物。对我来说,算法的其他描述非常复杂(在维基百科和其他网站上)。

以下是我的理解:

假设我们希望在数组中搜索元素10

Index i  0  1   2   3    4
         2  3   4  10   40 

这里有一些斐波那契数字:

Index j  0  1   2   3    4    5    6    7    8    9
         0  1   1   2    3    5    8    13   21   34

我们要做的第一件事就是找到大于等于数组长度的斐波纳契数。数组长度为4,因此我们需要使用位于索引位置5的斐波那契数j=5

但是现在我们将数组分开以及如何继续?我真的不明白..请帮助理解考试...

1 个答案:

答案 0 :(得分:1)

算法按以下方式进行: 数组的长度为5,因此大于或等于5的斐波纳契数是5.斐波那契数列前面的两个数是2 [n-2]和3 [n-1] - (2 ,3,5)。

因此,将arr [n-2]即arr [2]与要搜索的数字10进行比较。

如果元素小于数字,则序列向左移动1次。此外,保存先前的索引以用于下一次迭代,以给出索引的偏移量。在这种情况下,由于4较小,因此n-2变为1(1,2,3)。 arr [1 + 2(prev)] = arr [3] = 10.因此,数字的索引是3。

如果元素较大,则序列向左移动2次。

将min(n-2 + offset,n)th元素与number进行比较,得到匹配结果。