我按照这些指导创建基本的斐波那契搜索程序:斐波那契搜索蟒蛇:
让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