【发布时间】:2017-03-08 12:21:52
【问题描述】:
我正在按照这些说明创建一个基本的斐波那契搜索程序:
让F 成为斐波那契数列表 (ListFibonacci),直到我们的排序列表 (ListElements) 的长度为 n。 (如果n 不是斐波那契数,则F 包含直到大于n 的下一个斐波那契元素的元素)。让X 成为我们需要在排序列表ListElements 中找到其位置的数字。
要测试X 是否在ListElements 中,请按以下步骤操作:
1) 设k = F[p-1] where p = len(F)(即F的最后一个元素)
2) 如果k = 0,停止。没有匹配; X 不在列表中 ListElements。
3) 将 X 与索引 F[p−2] 处的 ListElements 中的元素进行比较。
4) 如果X 匹配,则停止。
5) 如果X 小于ListElements 中索引F[p−2] 的条目,则元素X 必须位于ListElements 中从1 到F[p-2] 的下部。设置p = p − 1, k = F[p-1] 并返回步骤2。
6) 如果项目大于条目F[p-2],则元素X 必须在ListElements 中从F[p-2] 到n 的上部。 将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
【问题讨论】: