1.写出斐波那契二分检索,即使用斐波那契数列二分有序序列,查找某给定元素,找到返回下标,找不到返回-1
时间: 2024-03-16 13:48:05 浏览: 54
采用二分查找法和顺序查找法查找元素的下标
好的,下面是斐波那契二分检索的代码:
```python
def fibonacci_search(arr, x):
"""
斐波那契二分检索
:param arr: 有序序列
:param x: 待查找元素
:return: 若找到,返回下标;否则,返回-1
"""
n = len(arr)
fib_k, fib_k_1 = 1, 0 # 初始化斐波那契数列
while fib_k < n:
fib_k_2 = fib_k_1
fib_k_1 = fib_k
fib_k = fib_k_1 + fib_k_2
# 在arr右侧补全元素,使序列长度为斐波那契数列中的某个数
arr += [arr[-1]] * (fib_k - n)
low, high = 0, n + fib_k_1 - 1
while low <= high:
mid = low + fib_k_2
if x == arr[mid]:
return min(mid, n - 1) # 找到元素
elif x < arr[mid]:
high = mid - 1
fib_k_1, fib_k_2 = fib_k_2, fib_k_1 - fib_k_2
else:
low = mid + 1
fib_k_1, fib_k_2 = fib_k_2, fib_k_1 - fib_k_2
return -1 # 未找到元素
```
其中,`arr`为有序序列,`x`为待查找元素。函数会将序列长度扩展至斐波那契数列中的某个数,并使用斐波那契数列进行二分查找。如果找到元素,则返回下标;否则返回-1。
阅读全文