学了半天,终于搞懂斐波那契查找算法
介绍
本文主要记录笔者本人在B站学习尚硅谷韩顺平老师的数据结构与算法时,学到斐波那契查找算法,遇到困惑,最后经过查阅查阅资料,终于搞懂算法本身的过程。在此与大家分享笔者理解该算法的一些见解。
原视频地址:斐波那契查找
斐波那契数列查找介绍
斐波那契数列查找算法在我理解来看是一种变式的二分查找,与二分查找不同是:
(1)二分查找每次查找数组的中间值,例如有一个长度为6的数组如下:[1,8,10,89,1000,1234],其中间值索引:
m i d = l e f t + ( r i g h t − l e f t ) 2 mid = left + \frac{(right - left)}{2} mid=left+2(right−left)
则第一次查找时,查找的是索引为2的元素10,然后根据根据查找目标值和元素10进行比较,再判断是往左边还是往右边进行递归的二分查找。
(2)而斐波那契数列查找除了查找值的索引mid的取值不同,其他与二分查找基本一致。使用斐波那契查找需要借助斐波那契数列,斐波那契数列的递归表达式如下(在此默认你是知道斐波那契数列的,如若不知道,则自行搜索相关知识点):
F ( n ) = F ( n − 1 ) + F ( n − 2 ) F(n) = F(n-1) +F(n-2)