裴波那契查詢(fibonacci search)是利用**分割原理實現的查詢方法。
斐波那契查詢的核心是:
1.當key == a[mid]時,查詢成功;
2.當key < a[mid]時,新的查詢範圍是low至mid-1, 此時範圍個數為f[k-1] - 1個,即陣列左邊的長度;
3.當key < a[mid]時,新的查詢範圍是mid+1至high,此時範圍個數為f[k-2] - 1個,即陣列右邊的長度;
importpython新手,如有不對的地方請指正。random
#source為待查詢陣列,key為要查詢的數
deffibonaccisearch(source,key):
#生成裴波那契數列
fib = [0,1]
for i in range(1,36):
#確定待查詢陣列在裴波那契數列的位置
k =0
n =len(source)
#此處 n>fib[k]-1 也是別有深意的
#若n恰好是裴波那契數列上某一項,且要查詢的元素正好在最後一位,此時必須將陣列長度填充到數列下一項的數字
while(n > fib[k]-1):
k = k + 1
#將待查詢陣列填充到指定的長度
for i in
range(n,fib[k]):
low,high = 0,n-1
while(low <=high):
#獲取**分割位置元素下標
mid = low + fib[k-1] - 1
if(key
#若key比這個元素小,則key值應該在low至mid-1之間,剩下的範圍個數為f(k-1)-1
high = mid - 1k = k -1
elif(key >a[mid]):
#若key比這個元素大,則key至應該在mid+1至high之間,剩下的元素個數為f(k)-f(k-1)-1=f(k-2)-1
low = mid + 1k = k - 2
else
:
if(mid
return
mid
else
:
return n-1
return-1#
## 函式測試 ###
#生成待查詢的陣列
a = [random.randint(1,100000) for x in range(0,33)]
a.sort()
#待查詢的數
key = 673990
#輸出查詢到的位置下標
print(fibonaccisearch(a,key))
裴波那契數列
裴波那契 fibonacci leonardo,約1170 1250 是義大利著名數學家 在他的著作 算盤書 中許多有趣的問題,最富成功的問題是著名的 兔子繁殖問題 如果每對兔子每月繁殖一對子兔,而子兔在出生後第二個月就有生殖能力,試問一對兔子一年能繁殖多少對兔子?可以這樣思考 第乙個月後即第二個月...
裴波那契數列
def fib max num n,a,b 0,0,1 while n max num print b 列印出來的就是裴波那契數列,從第三項開始,每一項都等於前兩項之和 a,b b,a b n n 1 return done fib 7 0,0,1 第一次沒迴圈時預設值n 0,a 0,b 1 1,1...
斐波那契查詢詳解
斐波那契查詢的 前提是待查詢的查詢表必須順序儲存並且有序。相對於折半查詢,一般將待比較的key值與第mid low high 2位置的元素比較,比較結果分三種情況 1 相等,mid位置的元素即為所求 2 low mid 1 3 high mid 1 斐波那契查詢與折半查詢很相似,他是根據斐波那契序列...