在Internet上,我只找到算法的代码,但是我需要先以文本形式理解,因为我只有从代码中理解内容。算法的其他描述对我来说非常复杂(在Wikipedia和其他站点上)。
这是我远的理解:
说我们需要在数组中搜索元素10
:
Index i 0 1 2 3 4
2 3 4 10 40
一些fibonacci编号在这里:
Index j 0 1 2 3 4 5 6 7 8 9
0 1 1 2 3 5 8 13 21 34
我们要做的第一件事是找到与数组长度更大相等的斐波那契号。数组长度为4
,因此我们需要服用fibonacci编号5
,该数字在索引位置j=5
。
但是我们现在在哪里分割数组,以及如何继续?我真的不明白。请帮助理解考试...
该算法以以下方式进行:阵列的长度为5,因此大于或等于5的斐波那契数为5。,3,5)。
so,将arr [n-2]即ARR [2]与要搜索的数字进行比较,为10。
如果元素小于数字,则序列向左移动1次。此外,先前的索引将保存用于下一个迭代,以偏移索引。在这种情况下,由于4较小,n-2变为1(1、2、3)。arr [1 2(prev)] = arr [3] =10。因此,数字的索引为3。
如果元素更大,则序列向左移2次。
总是将最小(n-2 偏移,n)元素与数字进行比较以获得匹配结果。