【问题标题】:Fibonacci Search python:斐波那契搜索python:
【发布时间】: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 中从1F[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 − 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

【问题讨论】:

    标签: python search fibonacci


    【解决方案1】:

    我认为你的教授或布置作业的人在笑,这个算法甚至不接近斐波那契数列的基本算法。首先,您的观点 3

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

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

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

    但是,这将要求两个列表的长度相同,并且正如您所展示的那样,这没有先决条件。

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

    【讨论】:

    • 我会尝试复制它,哈哈。也许他是!我想他说他是从别的地方抄来的,猜错了。
    猜你喜欢
    • 2011-11-27
    • 2014-05-23
    • 2013-08-03
    • 2013-02-24
    • 2012-12-29
    • 1970-01-01
    • 2016-04-28
    • 2011-04-26
    • 2016-02-21
    相关资源
    最近更新 更多