十大排序、七大查找算法python实现——斐波那契查找(Fibonacci Searching)
原理参考链接:https://www.cnblogs.com/maybe2030/p/4715035.html
复杂度分析:最坏情况下,时间复杂度为O(log2n),且其期望复杂度也为O(log2n)。
首先,需要建立斐波那契函数,用来作为分割点,替代二分查找中的中心点。
fib = lambda n: n if n < 2 else fib(n-1) + fib(n-2)
输出得到斐波那契数列[0,1,1,2,3,5,8,13,21,34,55,89,...]
由于斐波那契查找是通过斐波拉契数列来作为分割点,因此需要注意以下几点:
1.分割点计算方法:mid=F(k-1)-1
2.k值的计算方法是:
2.1 初始k值的计算方法是
k = 0
while fib(k) <= len(L)-1: # L就是待查找的数组
k += 1
2.2 之后k值的确定方法是<