斐波那契演算法

2021-09-26 19:32:44 字數 838 閱讀 7476

其思想與折半查詢、插值查詢沒有多大區別,本質上只是分割點的選擇不同。斐波那契查詢需要構造斐波那契數列,該數列的作用就是提供分割點(好多演算法書都沒有介紹清楚啊!!!)參閱折半查詢、插值查詢以及斐波那契查詢

(1) 演算法首先找到構造乙個查詢表,即在原來的陣列上新增元素,使得該查詢表(陣列)的長度為某個斐波那契值減1,即f(k)-1;

(2) 設定當前的分隔為mid = low + f[k-1] -1. 至於為什麼這麼設定分割點?我認為是斐波那契數列的特點,即後一項是前兩項之和,這前兩項正好對應著查詢表的左右兩部分。可以簡單的理解為一種特殊的分割點設定方法;

(3) 當key = a[mid]時,查詢成功;當keya[mid]時,新範圍是第m+1個到第high個,此時範圍個數為f[k-2]-1個。

(4) 最後將mid與查詢表的長度n進行比較,若不大於查詢表的長度,則mid為查詢到的位置;否則,mid為不全補全數值處的位置。

其時間複雜度仍為o(logn)。

//斐波那契函式定義

intfibonaccisearch

(int

* array,

int n,

int key)

else

if(key>array[mid]

)else

}return0;

}//斐波那契數列生成函式定義,非遞迴實現

intfibonacci

(int n)

return m;

}return-1

;}//斐波那契數列生成函式定義,遞迴實現

intfibonacci1

(int n)

斐波那契查詢演算法

與二分查詢相比,斐波那契查詢演算法的明顯優點在於它只涉及加法和減法運算,而不用除法。因為除法比加減法要占去更多的機時,因此,斐波那契查詢的平均效能要比折半查詢好。include void fibonacci int f int fibonacci search int a,int key,int n...

演算法 斐波那契(1)

1.乙隻青蛙一次可以跳上一級台階,也可以跳上二級台階 為了跳上n級台階一共有幾種跳法 解析 1.n 1 1種 2.n 2 2種 3.n級台階可以由n 1或者n 2級台階跳上來f n f n 2 f n 1 include using namespace std int a 100 int jump ...

斐波那契查詢演算法

斐波那契查詢的核心是 1 當key a mid 時,查詢成功 2 當keya mid 時,新的查詢範圍是第mid 1個到第high個,此時範圍個數為f k 2 1個,即陣列右邊的長度,所以要在 f k 2 1 範圍內查詢。如下 1 include2 include 3 include4 includ...