/* 對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...