斐波那契查詢

2022-08-25 19:15:14 字數 1407 閱讀 6683

斐波那契查詢

斐波那契查詢也是折半查詢的一種改良版;斐波那契查詢最主要的就是找mid這個點;

在該種查詢演算法中,我們要找的mid這個點為陣列中的**分割點,要求**分割點

我們就要用到斐波那契數列了;我們可以看一下這個數列:1,1,2,3,5,8,13,21,34,55..........;

可以看出倆個規律:

1:從第三項開始每一項等於它的前兩項的和;

2:數列越往後,前後兩項的比值越接近0.618,也就是**比例的比值;

利用這兩個規律我們就可以來找這個**分割點;我們令這個陣列為f,下標為k;

斐波那契查詢的核心就是在mid前面的長度為f[k-1]-1,在mid的後面的長度為f[k-2]-1;

具體步驟:(記待查詢的陣列為a)

1:構建斐波那契陣列;

2:找到n(a陣列的長度)在斐波那契陣列中的位置,並將陣列補全(可用a(n-1)來補);

3:計算mid=low+f(k-1)-1;

4:如果a[mid]>key(key為要查詢的數)high=mid-1;k=k-1;(mid前面的長度)

5:如果a[mid[

6:如果a[mid]=key &&mid<=high 則返回下標值(即mid的值);否則查詢失敗;

#includeusing

namespace

std;

int max_size=20

;void fbnq_list(int *a)//

構建斐波那契陣列;

}int fbnq_search(int a,int n,int

key)

else

if(a[mid]

else

}return -1

;

}int

main()

;

intkey;

cin>>key;

int x=fbnq_search(a,12

,key);

if(x!=-1) cout/

輸出所對應的下標;

else cout<

沒有該元素";

return0;

}

斐波那契查詢是折半查詢的公升級版,那麼也要求序列是有序的序列;

在最壞情況下,斐波那契查詢的時間複雜度還是o(log2n),且其期望複雜度也為o(log2n),

但是與折半查詢相比,斐波那契查詢的優點是它只涉及加法和減法運算,而不用除法,

而除法比加減法要占用更多的時間,因此,斐波那契查詢的執行時間理論上比折半查詢小,

但是還是得視具體情況而定。

斐波那契查詢

斐波那契查詢 斐波那契查詢的核心是 1 當key a mid 時,查詢成功 2 當key 3 當key a mid 時,新的查詢範圍是第mid 1個到第high個,此時範圍個數為f k 2 1個,即陣列右邊的長度,所以要在 f k 2 1 範圍內查詢。與二分查詢相比,斐波那契查詢演算法 的明顯優點在...

斐波那契查詢

與二分查詢相比,斐波那契查詢演算法的明顯優點在於它只涉及加法和減法運算,而不用除法。因為除法比加減法要占去更多的機時,因此,斐波那契查詢的平均效能要比折半查詢好。斐波那契查詢與折半查詢的時間複雜度間同為o log2 log2n 平均 情況下,斐波那契查詢優於折半查詢,但最壞情況下則差於折半查詢。斐波...

斐波那契查詢

基於二分法 此演算法依靠斐波那契數列 來跳轉比較位置 在玩數字板所以有了手寫圖 單步驟原理如下 c語言實現 include include define return fail 1 斐波那契查詢 int fibonaccisearch int src int,int src len,int sear...