裴波那契查詢詳解 Python實現

2022-05-08 07:00:08 字數 1461 閱讀 5736

裴波那契查詢(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個,即陣列右邊的長度;

import

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))

python新手,如有不對的地方請指正。

裴波那契數列

裴波那契 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 斐波那契查詢與折半查詢很相似,他是根據斐波那契序列...