我按照這些指導創建基本的斐波那契搜索程序:斐波那契搜索蟒蛇:
讓F
是斐波那契數的列表(ListFibonacci
)人數達到我們的排序列表(ListElements
)的長度n
。 (如果n
不是斐波納契數,那麼F
包含直到大於n
的下一個斐波納契元素的元素)。假設X
是我們需要在我們的排序列表中找到的數字ListElements
。
爲了測試是否X
是ListElements
,按照下列步驟:
1)設k = F[p-1]
其中p = len(F)
(即,F
最後一個元素)
2)如果k = 0
,停止。沒有比賽; X
不在列表中ListElements
。
3)將X
與ListElements
中的元素比較F[p−2]
。
4)如果X
匹配,停止。
5)如X
小於在索引F[p−2]
在ListElements
條目,元素X
必須在從1
到F[p-2]
在ListElements
下部。設置p = p − 1
,k = F[p-1]
並返回到步驟2。
6)如果該項目是比條目F[p-2]
越大,元件X
必須在從F[p-2]
到n
在ListElements
的上部。 將搜尋起始地址ListElements
更新爲F[p-2]
。集p = p − 2
,k = F[p-1]
,回到步驟2
中的加粗部分是我認爲我有問題最多,但總的來說我的理解6)是相當低的反正。澄清理解指令和編寫程序是作業的一部分。
這是我此刻的程序:
F = [0,1,1,2,3,5,8]
ListElements = sorted([83,24,65,123,175,57,123,243])
X = 243
p = len(F)
k = F[p-1]
if(k == 0):
print("K = 0")
else:
while(True):
print("test1")
if(X == ListElements[F[p-2]]):
print(str(X) + " " + str(p) + " " + str(k))
break
elif(X < ListElements[F[p-2]]):
print("test2")
p -= 1
k = F[p-1]
elif(X > ListElements[F[p-2]]):
print("test3")
p -= 2
k = F[p-1]
下面是一些輸出:
Input: X = 123,
Output: test1
123 7 8
Input: X = 243,
Output: test1
File "C:\SNIP", line 20, in <module>
if(X == ListElements[F[p-2]]):
IndexError: list index out of range
Traceback (most recent call last):
test3
test1
test3
test1
test3
test1
Input: 24,
Output: test1
test2
test1
test2
test1
test2
test1
test2
test1
test2
test1
24 2 1
我會盡力複製它,哈哈:
的斐波那契搜索一個真正的算法可以在維基百科頁面在這裏找到。也許他是!我想他說他把它複製到了別的地方,你猜這是錯誤的。 – Zed