Python实现斐波那契查找

思路:

自己去看网上的概念贴

代码:

def fibonacci_sequence(num: int):  # 按照待查找数列的大小,动态生成斐波那契数列
    a, b = 0, 1
    while a <= num-1:
        yield a
        a, b = b, a + b
    yield a
    return


def fibonacci_search(a: [], n: int, key: int)->int:  # 斐波那契查找
    low, high, k = 1, n, 0
    F = fibonacci_sequence(n)
    dynamic_F = []
    for item in F:
        dynamic_F.append(item)
    while n > dynamic_F[k] - 1:
        k += 1
    for i in range(n, dynamic_F[k]-1):
        a.append(a[n])

    while low <= high:
        mid = low + dynamic_F[k-1] - 1
        if key < a[mid]:
            high = mid - 1
            k -= 1
        elif key > a[mid]:
            low = mid + 1
            k -= 2
        else:
            if mid <= n:
                return mid
            else:
                return n
    return 0


if __name__ == '__main__':
    a = [0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99]
    key = 47
    print("key's index is:", fibonacci_search(a, len(a)-1, key))

 

输出:

key's index is: 5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

越来越胖的GuanRunwei

祝老板们身体健康,财源广进!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值