gpt4 book ai didi

arrays - 如果当前索引的值小于我们要查找的值,为什么我们在斐波那契搜索中丢弃 2 个斐波那契数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:32 25 4
gpt4 key购买 nike

我有执行 Fibonacci 搜索的代码,我想知道如果我们的键大于数组中当前索引处的值,为什么我们要丢弃 2 个 Fibonacci 数?

public class FibSearch{
static int fibSearch(int[] a, int x){
int f1 = 1, f2 = 0, mid = 2;
while(f1 < a.length){
f1 = f1 + f2;
f2 = f1 - f2;
mid++;
}

int first = 0;
mid--;
f2 = f1 - f2;
f1 = f1 - f2;

while(mid > 0){
int index = first + f1;
if(index >= a.length || a[index] > x){
mid--;
f2 = f1 - f2;
f1 = f1 - f2;
}
else if(a[index] == x){
return index;
}
else{
first = index;
mid = mid - 2;
f1 = f1 - f2;
f2 = f2 - f1;
//why not write
//mid = mid - 1;
//f2 = f1 - f2;
//f1 = f1 - f2;
}
}
return -1;
}
}

如果我在说什么,最后一个 else 语句。

最佳答案

因为如果我们有一个斐波那契数列:0,1,1,2,3,5,8,13,... F(k - 1) + F(k - 3) 是落在中间的数F(k - 1) 和 F(k),这就是我们想要的,因为它是分而治之的。

关于arrays - 如果当前索引的值小于我们要查找的值,为什么我们在斐波那契搜索中丢弃 2 个斐波那契数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29962506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com