斐波那契(黃金分割)查詢

2021-10-22 08:42:34 字數 1274 閱讀 5327

斐波那契數列:1 1 2 3 5 8 13 21 .。。。

**分割點是指把一條線段分割成倆部分,使其中一部分與全長之比等於另一部分與這部分之比。取其前三位數字的近似值是0.618,由於按比例設計地造型十分美麗,因此被叫**分割,也成為中外比

對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-2]-1 的兩段,即如上圖所示。從而中間位置為 mid=low+f(k-1)-1

2)類似的,每一子段也可以用相同的方式分割

3)但順序表長度 n 不一定剛好等於 f[k]-1,所以需要將原來的順序表長度 n 增加至 f[k]-1。這裡的 k 值只要能使得 f[k]-1 恰好大於或等於 n 即可,由以下**得到,順序表長度增加後,新增的位置(從 n+1 到 f[k]-1 位置),都賦為 n 位置的值即可

public

class

main

return f;

}//編寫斐波那契數列查詢演算法

//使用非遞迴的方式編寫演算法

/** *

* @param a 陣列

* @param key 我們需要查詢的關鍵碼(值)

* @return 返回對應的下表,如果沒有則-1

*/public

static

intfibsearch

(int

a,int key)

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

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

int[

] tmp=arrays.

copyof

(a, f[k]);

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

//舉例:temp =

//=>

for(

int i=high+

1;i)//使用while來迴圈處理,找到我們的數key

while

(low<=high)

else

if(key>tmp[mid]

)else

else}}

return-1;}}

斐波那契(黃金分割)查詢

斐波那契數列 1,1,2,3,5,8,13 可以發現相鄰的兩個數無限接近 分割點。中間值 mid low f k 1 1 f代表斐波那契數列 理解 1.斐波那契數列 f k f k 1 f k 2 的性質。可以得到f k 1 f k 1 1 f k 2 1 1 所以只要順序表的長度為f k 1,就可...

查詢演算法 斐波那契查詢 黃金分割法

斐波那契搜尋 fibonacci search 又稱斐波那契查詢,是區間中單峰函式的搜尋技術。斐波那契搜尋就是在二分查詢的基礎上根據斐波那契數列進行分割的。在斐波那契數列找乙個等於略大於查詢表中元素個數的數f n 將原查詢表擴充套件為長度為f n 如果要補充元素,則補充重複最後乙個元素,直到滿足f ...

python黃金分割,斐波那契數列

user bin env python coding utf 8 class fuct object 返回乙個 分割數列 def init self self.flist 0,1 self.main def main self listlen raw input 請輸入 分割的數列長度 self.c...