arrays - 帮助理解斐波那契搜索

标签 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,所以我们需要取索引位置 j=5 的斐波那契数 5

但是我们现在在哪里划分数组以及如何继续?实在是看不懂。。考试请大家帮忙理解。。。

最佳答案

算法按以下方式进行: 数组的长度为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)个元素与number比较得到匹配结果。

关于arrays - 帮助理解斐波那契搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46024720/

相关文章:

c++ - CSR 矩阵 - 矩阵乘法

C# 如何在不打开浏览器的情况下搜索某些内容,然后转到第一个搜索结果?

arrays - 搜索整个数组 Swift

arrays - (Dafny) 将一个数组的元素添加到另一个 - 循环不变式

javascript - 找到对象的几何中心并旋转它以最大化边界框高度

Python:获取具有> = 3个奇数 "Recursively"的列表列表的数量

javascript - select2 搜索两个属性

PHP:将标准数组转换为关联数组键?

c++ - 如何从一个文件中读取数据并将其导入到另一个文件中?

IOS SWIFT 从数组中删除项目在我的 TableView 中不起作用