Fibonacci查找


Fibonacci查找跟二分查找一样都是使用分治思想,其实都是每次查找的时候都是分两部分查找,二分查找使用的方式是分成等分的两部分,而Fibonacci查找使用的是Fibonacci数列划分。

为什么要按照Fibonacci数列划分呢?

下面先看看一个普通的二分查找:


未经优化的二分查找

可以证明二分查找的时间复杂度是o(logn),考虑前面系数的话,大约是o(1.5logn)

我们观察到进入右边区间的经过一次判断,而进入左边区间的经过两次判断,也就是进入左侧和右侧区间的比较次数不一样。

我们进行优化的思路是什么?

1.使进入左侧和右侧的比较次数一样

2.尽量进入右侧判断

第一种方式后面再说,顺着第二种方式,我们使用Fibonacci数列进行分割,这就是Fibonacci查找。利用斐波那契数来对传入的数组进行黄金分割,这样前半部分较多而后半部分较少。如此一来,我们人为造成的这种不平衡,反倒是助长了搜索成本的平衡。


Fibonacci查找

对于任何A[0,n],总是选取A[λn]为轴点,0<=λ<1

对于二分查找λ=0.5,对于Fibonacci查找λ=0.6108...

λ如何选值能达到最优,平均查找长度为a(λ)*log2

a(λ)*log2n = λ*[1+a(λ)*log2(λn)]*(1-λ)[2+a(λ)*log2(1-λ)n]

最后整理得出,a(λ)=1.4404...达到最优

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Fibonacci 数列 Fibonacci 数列,又称黄金分割数列,指的是这样一个数列: 数学上,Fibonac...
    谢小帅阅读 4,030评论 1 0
  • 原文出处:http://www.cnblogs.com/maybe2030/p/4715035.html引文出处:...
    明教de教主阅读 13,012评论 0 7
  • 目录 [1. 顺序查找][2. 二分查找][3. 插值查找][4. 斐波那契查找][5. 树表查找][6. 分块查...
    jiangmo阅读 18,071评论 4 6
  • 本文的整理基于:http://blog.csdn.net/qq_23217629/article/details/...
    阿阿阿阿毛阅读 5,548评论 0 3
  • 其实,看完整部影片还是有一个疑问——影片最后,站在夕阳的光影中向卢卡斯开枪的人究竟是谁,选择故意没有击中将其作为一...
    橙子C阅读 10,179评论 0 2

友情链接更多精彩内容