斐波那契搜索python:

时间:2017-03-08 12:21:52

标签: python search fibonacci

我按照这些说明创建了一个基本的斐波那契搜索程序:

F为斐波那契(ListFibonacci)数字列表,直至排序列表n的长度ListElements。 (如果n不是斐波纳契数,则F包含直到下一个大于n的斐波那契元素的元素。让X为我们需要在排序列表ListElements中找到其位置的数字。

要测试X中是否ListElements,请按以下步骤操作:

1)让k = F[p-1]位于p = len(F)(即F的最后一个元素)

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

3)将XListElementsF[p−2]处的元素进行比较。

4)如果X匹配,请停止。

5)如果X小于ListElements条目F[p−2]中的条目,则元素X必须位于1的下半部分F[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

1 个答案:

答案 0 :(得分:0)

我认为你的教授或任何设置任务的人都笑了,这个算法甚至不接近Fibonacci序列的基本算法。首先是你的观点3

  

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

要求您使用斐波纳契数列表中的一个数字作为索引,它应该是

  

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

然而,这将要求两个列表具有相同的长度,并且就您所示,没有先决条件。

斐波那契搜索的真实算法可以在维基百科页面上找到:https://en.wikipedia.org/wiki/Fibonacci_search_technique