斐波那契查找

斐波那契查找又称为黄金比例分割查找,

大家记不记得斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…….(从第三个数开始,后边每一个数都是前两个数的和)

然后我们会发现,随着斐波那契数列的递增,前后两个数的比值会越来越接近0.618,利用这个特性,我们就可以将黄金比例运用到查找技术中。

黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。

0.618被公认为最具有审美意义的比例数字,这个数值的作用不仅仅体现在诸如绘画、雕塑、音乐、建筑等艺术领域,而且在管理、工程设计等方面也有着不可忽视的作用。因此被称为黄金分
割。

 

1

 

 

如何实现

如何实现斐波那契查找,可以参考这篇CSDN博客,里面的代码写的很详尽。

我需要补充的一点是,并不一定非得左边是F[k-1]-1,右边是F[k-2]-1,也可以反过来,如果反过来的话只需要修改几行代码就OK了

把这一段改成

  1.  int mid=low+F[k-1]-1;  
  2.     if(key<temp[mid])  
  3.     {  
  4.       high=mid-1;  
  5.       k-=1;  
  6.     }  
  7.     else if(key>temp[mid])  
  8.     {  
  9.      low=mid+1;  
  10.      k-=2;  
  11.     }  

如下:

 1  int mid=low+F[k-1]-1;  
 2     if(key<temp[mid])  
 3     {  
 4       high=mid-1;  
 5       k-=1;  
 6     }  
 7     else if(key>temp[mid])  
 8     {  
 9      low=mid+1;  
10      k-=2;  
11     }  

这样就可以反过来了。

 

原文地址:https://www.cnblogs.com/limera/p/Fibonacci.html