2017-03-08 109 views
-3

我按照这些指导创建基本的斐波那契搜索程序:斐波那契搜索蟒蛇:

F是斐波那契数的列表(ListFibonacci)人数达到我们的排序列表(ListElements)的长度n。 (如果n不是斐波纳契数,那么F包含直到大于n的下一个斐波纳契元素的元素)。假设X是我们需要在我们的排序列表中找到的数字ListElements

为了测试是否XListElements,按照下列步骤:

1)设k = F[p-1]其中p = len(F)(即,F最后一个元素)

2)如果k = 0,停止。没有比赛; X不在列表中ListElements

3)将XListElements中的元素比较F[p−2]

4)如果X匹配,停止。

5)如X小于在索引F[p−2]ListElements条目,元素X必须在从1F[p-2]ListElements下部。设置p = p − 1k = F[p-1]并返回到步骤2。

6)如果该项目是比条目F[p-2]越大,元件X必须在从F[p-2]nListElements的上部。 将搜寻起始地址ListElements更新为F[p-2]p = p − 2k = 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 

回答

0

我觉得你的教授或任何人设定的分配有笑,该算法甚至还没有接近到斐波那契数列的基本算法。对于初学者您的观点3

3)将X与ListElements中索引为F [p-2]的元素进行比较。

询问您要使用的号码中的一个Fibonacci数列表为指标,它应该是

3)指数P-2 ListElements对元素比较X。

但是,这将需要两个列表是相同的长度,没有任何先决条件,只要你已经显示。 https://en.wikipedia.org/wiki/Fibonacci_search_technique

+0

我会尽力复制它,哈哈:

的斐波那契搜索一个真正的算法可以在维基百科页面在这里找到。也许他是!我想他说他把它复制到了别的地方,你猜这是错误的。 – Zed