在互联网上我只找到算法的代码,但我需要首先以文本的形式理解,因为我无法从代码中理解事物。对我来说,算法的其他描述非常复杂(在维基百科和其他网站上)。
以下是我的理解:
假设我们希望在数组中搜索元素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
。
但是现在我们将数组分开以及如何继续?我真的不明白..请帮助理解考试...
答案 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进行比较,得到匹配结果。