斐波那契查詢

2021-10-25 14:33:06 字數 1484 閱讀 7364

/* 對f[k-1]-1的理解:

* (1)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]-1和f[k-1]-1兩段,而中間位置為

* mid=low+f[k-1]-1

* (2)類似的,每個子段也可以用相同放式分割

* (3)但順序表長度n不一定等於f[k]-1,所以需要將原來順序表長度n增加至f[k]-1,這裡k值只要能使f[k]-1恰好大於等於n即可

**/public

class

fibonaccisearch

; system.out.

println

(fabnaccisearch

(array,

100));

system.out.

println

(arrays.

tostring

(fabonacci()

));}

public

static

int maxsize =20;

/** * 構建斐波那契數列

** @return

*/public

static

int[

]fabonacci()

return fabonacci;

}/**

* 斐波那契查詢演算法 前提:也是有序數列

* 步驟:1.先構建乙個斐波那契數列;

* 2.比較要查詢的數列的長度是否小於f[k],如果小於則要將原數列的長度擴容為f[k],不夠的位拿數 列中的最大值補齊

* 3.使用迴圈找到數

** @param array

* @param findvalue

* @return

*/public

static list

fabnaccisearch

(int

array,

int findvalue)

//因為f[k]值可能大於陣列array的長度,因此需要使用arrays類,構造乙個新的陣列,並指向arr

//不足的部分會使用0填充

int[

] temp = arrays.

copyof

(array, f[k]);

//實際上需求使用a陣列最後的數填充temp

for(

int i = high +

1; i < temp.length; i++

)//使用while來迴圈處理,找到數

while

(low <= high)

else

if(findvalue < temp[mid]

)else

else}}

return indexs;

}}

斐波那契查詢

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