斐波那契查找又称为黄金比例分割查找,
大家记不记得斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…….(从第三个数开始,后边每一个数都是前两个数的和)
然后我们会发现,随着斐波那契数列的递增,前后两个数的比值会越来越接近0.618,利用这个特性,我们就可以将黄金比例运用到查找技术中。
黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。
0.618被公认为最具有审美意义的比例数字,这个数值的作用不仅仅体现在诸如绘画、雕塑、音乐、建筑等艺术领域,而且在管理、工程设计等方面也有着不可忽视的作用。因此被称为黄金分
割。
如何实现
如何实现斐波那契查找,可以参考这篇CSDN博客,里面的代码写的很详尽。
我需要补充的一点是,并不一定非得左边是F[k-1]-1,右边是F[k-2]-1,也可以反过来,如果反过来的话只需要修改几行代码就OK了
把这一段改成
- int mid=low+F[k-1]-1;
- if(key<temp[mid])
- {
- high=mid-1;
- k-=1;
- }
- else if(key>temp[mid])
- {
- low=mid+1;
- k-=2;
- }
如下:
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