C 演算法設計查詢篇之04 斐波那契查詢

2021-08-25 06:10:55 字數 1120 閱讀 1515

斐波那契查詢(fibonacci search)

該文章的最新版本已遷移至個人部落格【位元飛】,單擊鏈結 訪問。

斐波那契查詢是區間中單峰函式的搜尋技術,它在二分查詢的基礎上根據斐波那契數列進行分割的。在斐波那契數列找乙個等於或略大於查詢表中元素個數的數f[n],如果原查詢表長度不足f[n],則補充重複最後乙個元素,直到滿足f[n]個元素時為止。完成後進行斐波那契分割,即f[n]個元素分割為前半部分f[n-1]個元素,後半部分f[n-2]個元素,根據值的關係確定往前或往後查詢,直到找到時為止。如果一直找不到,則返回-1。

示例:

public class program ;

calculatefibonacci();

console.writeline(fibonaccisearch(array, 80));

console.readkey();

}private const int maxsize = 47;

private static int _fibonacciarray = new int[maxsize];

private static void calculatefibonacci()

private static int fibonaccisearch(int array, int key) else

//平衡陣列中的後半部分用前面的最後乙個值補全

for(int i = length; i < _fibonacciarray[k]; i++)

banlance[i] = banlance[length - 1];

//接下來的過程和二分查詢類似

while(low <= high) else if(banlance[mid] < key) else

}//查詢不到時返回-1

return -1;}}

以上是斐波那契查詢演算法的一種實現,以下是這個案例的輸出結果:

該文章的最新版本已遷移至個人部落格【位元飛】,單擊鏈結 訪問。

10
分析:在最壞的情況下斐波那契查詢的時間複雜度為:

斐波那契查詢演算法

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

斐波那契查詢演算法

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

斐波那契查詢演算法

斐波那契查詢原理與二分查詢或者插值查詢演算法類似,僅僅改變了中間結點 mid 的位置,mid 不再是中間或插值得到,而是位於 分割點附近,即 mid low f k 1 1 f 代表斐波那契數列 如下圖所示 由斐波那契數列 f k f k 1 f k 2 的性質,可以得到 f k 1 f k 1 1...