查詢 斐波那契查詢

2022-07-13 18:42:15 字數 1466 閱讀 4760

1、1、2、3、5、8、13、21、……
斐波那契數列又被成為**分割數列,因為前一項/後一項越來越趨近於0.618由上面的數列,可以發現 除了前兩項,後面每一項都是前兩項的和,如3+5=8、8+13=21.....

由此可以得到一下等式

f(n)=f(n-1)+f(n-2)(除了前兩項)

斐波那契查詢原理與前兩種相似,僅僅改變了中間結點(mid)的位置,mid不再是中間或插值得到,而是位於**分割點附近,即mid=low+f(k-1)-1(f代表斐波那契數列)  

由斐波那契數列可知,f(k)=f(k-1)+f(k-2),那f(k)-1=(f(k-1)-1)+(f(k-2)-1)+1,所以陣列長度只要滿足 f(k)-1,就可以將陣列分為f(k-1)-1f(k-2)-1左右兩部分,其中mid=low+f(k-1)-1

目標;查詢99

int a=;

public

static

int maxsize=20; //

先為斐波那契數列設定長度

//構建你波拉契數列

public

static

int fib()

return

f; }

public

static

int fibsearch(int arr,int

key)

int temp=arrays.copyof(arr,f[k]); //

為什麼構建乙個新陣列,因為下面需要對陣列進行擴充套件,查詢最後還要用到原始陣列,所以不能用原始陣列

//擴充套件陣列

for (int i=right+1;i//

這裡為什麼用temp.length?因為上面arrays.copyof(arr,f[k])已經對陣列擴充套件了,這裡我們進行的是把擴充套件的值都改為原始陣列的最大值

temp[i]=arr[right];

}while (left<=right)

else

if (key>temp[mid])

else

else }}

//都找不到返回-1

return -1;

}

public

static

void

main(string args) ;

int key=99;

system.out.println(fibsearch(a,key));

}

斐波那契查詢

斐波那契查詢 斐波那契查詢的核心是 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...