斐波那契查找-四大查找算法(四)

查找算法---(图解)斐波那契查找 斐波那契查找原理与前两种相似,仅仅改变了中间结点(mid)的位置,mid不再是中间或插值得到,而是位于黄金分割点附近。 阅读详情
思路说明:

斐波那契查找和前三个查找相似,都是需要先定义那个mid比较值,只不过是mid值的定义方式不一样斐波那契算法是让mid保持在数组的黄金分割点处,mid前面长度为F[K-1]-1,后面长度为F[K-2]-1,数组总长度为F[K]-1,mid在黄金分割点。
在这里插入图片描述

首先创建一个斐波那契数组
 //定义一个斐波那契数列
    public static int[] feibo(int l){
        int feibArr[]=new int[l];
        feibArr[0]=1;
        feibArr[1]=1;
        for (int i = 2; i <l ; i++) {
            feibArr[i]=feibArr[i-1]+feibArr[i-2];
        }
        return feibArr;
    }
然后实现斐波那契方法
//斐波那契查找算法实现
public static int feiboSearch(int arr[],int s){
    int fb[]=feibo(arr.length);//获取斐波那契的数组
    int left =0;//原始数组左边下标
    int right=arr.length-1;//原始数组右边下标
    int k=0;//斐波那契数组的下标
    while (fb[k]-1<right){//指向数组的最后索引
        k++;
    }
  /* 由于f(k)不是步长为1的递增数列,所以可能出现f(k) - 1的值大于原始数组最后一个索引的情况
    比如原始数组最大索引为4,那么此时f(k)就等于5,所以要构造一个新数组,不够的部分会用0填充
    如果多余部分用0填充可能会造成查找失败,因此,需要将0的部分填充为原来数组中最后一个数字*/
        int temp[]= Arrays.copyOf(arr,fb[k]);
        for (int i=right+1;i<temp.length;i++){
            temp[i]=arr[right];
        }
        //开始循环查找
    while (left<=right){
        int mid=left +fb[k-1]-1;//获取那个离查找值比较近的值
        if (s<temp[mid])
        {
            right=mid-1;
            k-=1;
        }else if(s>temp[mid]){
            left=mid+1;
            k-=2;
        }else{
            return mid<=right? mid:right;//返回下标,这一步当mid的大于right的时候要返回right的值
        }
    }
    //找不到退出循环返回-1
        return -1;


}
最后测试和结果图
public static void main(String[] args) {
     int arr[]={1,24,55,66,77,88};
    int r = feiboSearch(arr, 88);
    System.out.println(r);
}

在这里插入图片描述

Tips:折半查找是进行加法与除法运算的(mid=(low+high)/2),插值查找则进行更复杂的四则运算(mid = low + (high - low) * ((key - a[low]) / (a[high] - a[low]))),而斐波那契查找只进行最简单的加减法运算(mid = low + F[k-1] - 1),在海量数据的查找过程中,这种细微的差别可能会影响最终的效率。
思路代码感谢大佬小希https://caochenlei.blog.youkuaiyun.com/article/details/114736132

斐波那契(黄金分割法)查找算法 文章目录一、斐波那契查找算法概述1.1 什么是斐波那契查找算法1.2 什么是斐波那契数列1.3 斐波那契查找算法的思想二、斐波那契查找的基本步骤三、斐波那契查找的代码实现 一、斐波那契查找算法概述 1.1 什么是斐波那契查找算法 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。 斐波那契查找同样是查找算法家族中的一员,它要求数据是有序的(升序或降序)。斐波那契查找采用和二分查找/插值查找相似的 阅读详情

相关推荐

斐波那契查找(黄金分割查找算法)

文章目录斐波那契一、摘要二、什么是斐波那契查找三、 基本思想四、举例五、如何计算1、斐波那契数组2、利用斐波那契数组确定元素的位置3、举例六、代码实现1、斐波那契数组实现2、斐波那契查找3、实验数据及测试4、编译环境七、后记 斐波那契 一、摘要 如果从文件中读取的数据记录的关键字是有序排列的(递增的或是递减的),则可以用一种比折半查找法更有效率的查找方法来查找文件中的记录,即为斐波那契查找,也称...

qq_45768871的博客 3718

python贝塞尔插值公式_斐波那契查找原理——附python和C++实现

在正式介绍斐波那契查找之前,首先要知道什么是斐波那契数列:机器学习入坑者:面试被问到斐波那契数列怎么办?——附python和C++实现​zhuanlan.zhihu.com 前面的文章分析了顺序查找、二分查找和插值查找,其中顺序查找的思想最简单,只需要将目标值和数据中每一个值进行比较即可;二分查找每次将区间长度缩减一半;插值查找按照目标值和边界值的关系确定区间分割方式。 斐波...

weixin_39899630的博客 499

斐波那契查找算法——深入理解,详细推导

斐波那契查找算法又称黄金分割查找算法。黄金分割点是把一条线段分成两个部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是0.618。 了解斐波那契查找算法就必须了解斐波那契数列,如何这样一组数列{1,1,2,3,5,8,13,21,34,55}。其中每项的值等于前两项之和,两个相邻数字的比列无线接近与0.618。 关于斐波那契算法,(以下截图来自韩顺平老师数据结构与算法的教学视频)链接 补充:理解mid = low + F(k - 1) - 1对于后面写程序至关重要,其中式子F[

weixin_45642253的博客 2940

斐波那契查找算法

1)黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。 2)斐波那契数列{1,1,2,3,5, 8, 13, 21,34, 55}发现斐波那契数列的两个相邻数的比例,无限接近黄金分割值0.618 斐波那契(黄金分割法)原理...

Azadoo的博客 298

『算法』——斐波那契查找算法(python实现)

斐波那契查找引言1、概述2、原理 引言 \quad \quad在介绍斐波那契查找算法之前,先介绍一下很它紧密相连的一个概念——黄金分割。黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。0.618被公认为最具有审美意义的比例数字,这个数值的作用不仅仅体现在诸如绘画、雕塑、音乐、建筑等艺术领域,而且在管理、工程设计等方面也有着不可忽视的作用。因此被称为黄金分割。斐波那契数列:1, 1, 2, 3,

weixin_45666566的博客 1692

突破编程_C++_查找算法(斐波那契查找)

C++ 查找算法:斐波那契查找

突破编程 1174

查找之四 , fibonacci 查找

Fibonacci 查找的方法是根据Fibonacci 数列的特点对查找表进行分割。其查找表有一个特点就是: 查找表的长度等于某个Fibonacci 数值减   1 。即: n = table.length  , fn = fib(k) ;  n = fn -1 ; 如果不满足这个条件,则不能使用Fibonacci 查找方法进行查找。使用 l , h , m ,表示待查找表的下界、上界 、 和

sun_star1chen的专栏 1452

【愚公系列】七大查找算法(四)-斐波那契查找

在编程语言中,查找算法是指在一个数据集合中查找某个元素是否存在的算法。常见的查找算法包括:顺序查找(Sequential Search):逐个遍历数据集来查找目标元素,时间复杂度为O(n)。二分查找(Binary Search):在有序数据集合中,从中间位置作为起点不断划分区间并查找,时间复杂度为O(log n)。插值查找(Interpolation Search):在有序数据集合中,根据目标元素与数据集合首尾之间的差值,利用插值估算目标元素的位置,时间复杂度为O(log log n)或O(n)。

愚公智库 47万+

【和我一起学算法】查找篇——斐波那契查找

斐波那契数列(Fibonacci)又称黄金分别数列,指的是这样一个数列:1,1,2,3,5,8,13,21,...。在数学上,斐波那契被递归方法如下定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n≥2)。该数列越往后,相邻的两个数的比值越趋向于黄金比例值(0.618),斐波那契查找就是在分法查找的基础上根据斐波那契数列进行分割的。 三、斐波那契查找 算法原理 Fibonacci查找与二分法查找几乎一样,只是在选取比较点(参照点)的位置有所区别。二分法选的是将数列中间的那个元..

二琳爱吃肉的博客 929

USRP X410 MPM版本与主机UHD版本不匹配问题记录与解决

至此大功告成!之前安装软件的坑算是填起来了,再次记录一下,希望能帮到有同样问题的小伙伴~

yanzuwu233的博客 1437

ArchLinux下用Wine运行钉钉全攻略:从字体配置到中文输入法避坑

本文详细介绍了在ArchLinux系统上使用Wine运行钉钉的完整配置流程。从最新的WoW64架构环境准备、中文字体配置与DPI优化,到钉钉安装、关键系统库替换,再到解决中文输入法失效等核心难题,提供了实战避坑指南。旨在帮助Linux用户在企业办公场景下,获得接近原生的稳定使用体验。

alice7model的博客 589

斐波那契查找

**基本思想:**也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。同样地,斐波那契查找也属于一种有序查找算法。 斐波那契查找与折半查找很相似,他是根据斐波那契序列的特点对有序表进行分割的。要求开始表中记录的个数为某个斐波那契数小1,即n=F(k)-1; 如果有序表的元素个n不等于(某个斐波那契数 - 1),即n≠F[k]-1,这时必须要将有序表的元素扩展...

cristianoxm的博客 427

知识检索中的四大评估指标:准确率、精确率、召回率与F1分数详解

摘要:NLP算法面试中,评估知识检索系统的核心指标包括准确率、精确率、召回率和F1分数。准确率衡量整体预测正确性,但在样本不均衡时可能失真;精确率关注预测正类中的真实比例(查准能力),召回率衡量真实正类被预测的比例(查全能力)。F1分数是两者的调和平均,提供综合评估。这些指标通过混淆矩阵计算,并存在制约关系:提高召回率往往降低精确率,反之亦然。应用场景包括文档检索(评估结果质量和覆盖度)和文本分类(如垃圾邮件过滤)。面试需掌握指标区别、适用场景及平衡方法(如调整阈值)。F1分数在样本不平衡时比准确率更具参考

Ven%的博客 1765

【算法系列 | 12】深入解析查找算法之—斐波那契查找

查找算法是计算机科学中的一类算法,用于在数据集中寻找特定值或数据项。其目标是确定数据是否存在于给定的数据结构中,并找到数据项的位置(索引)或其他相关信息。不同的查找算法适用于不同类型的数据结构,数据有序性,以及数据规模。以下是一些常见的查找算法以下是一些常见的查找算法及其应用场景:布隆过滤器(Bloom Filter):适用于判断一个元素是否存在于一个大规模的数据集中,时间复杂度为O(1),但有一定的误判率。二分查找。

颜淡慕潇 5万+

AI 边缘计算控制器GEAC91

AI 边缘计算控制器GEAC91是AI边缘计算控制器是一款基于 NVIDIA Jetson AGX Xavier处理 器、面向智能边缘计算应用场景的解决方案。

weixin_45905610的博客 1201

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

图解算法:四大查找算法

目录第一章 顺序查找算法1.1、算法介绍1.2、算法实现第二章 二分查找算法2.1、算法介绍2.2、算法实现第三章 插值查找算法3.1、算法介绍3.2、算法实现第四章 斐波那契查找4.1、算法介绍4.2、算法实现 项目地址:https://gitee.com/caochenlei/algorithms 第一章 顺序查找算法 1.1、算法介绍 顺序查找(Order Search)也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值num相比较,若相等则表示查找成功;若扫

轻松的小希 3957

YOLOv8改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块

许多证据表明层次化网络对图像恢复(IR)任务通常不太有效,因为IR的目标是逐个预测像素值(密集预测),而缩小特征图会丢失重要的像素级信息。然而,层次化结构有降低时间复杂度以及学习语义级和像素级特征表示的优点。为了弥补缺点并利用优点,设计了H - RAMi层。

Limiiiing的博客 379

算法 - 查找 - 斐波那契查找 (Fibonacci Search)

斐波那契查找 (Fibonacci Search)

DarkRabbit的专栏 1万+

时间序列—显著相关性和滞后性分析_python

本文讲述了两个时间序列(信号)的相关性分析,可以利用相关性分析进行特征筛选。此外本文还讲了怎么判断时间序列的滞后性的方法。

qq_34229228的博客 2万+

YOLOv11改进 | 引入SFSConv空间频率选择卷积(含SFSC3k2二次创新),空间频率特征协同作用,检测性能全面提升

本文提出在YOLOv11中引入SFSConv空间频率选择卷积模块,通过显式分离和动态融合空间域与频率域特征,解决传统卷积对多尺度目标检测的局限性。SFSConv包含空间频率分离、动态权重融合和协同特征重建三个核心机制,并进一步创新提出SFSC3k2结构,通过双路频率分支增强特征协同作用。该改进显著提升了YOLOv11在遥感、医学等多尺度复杂场景下的检测性能,实验显示在微小目标检测任务中mAP提升5%-10%。代码实现展示了SFSConv模块的核心逻辑及其在PyTorch中的高效实现。

走向CTO的路上... 769

斐波那契查找算法解析

文章目录前言一、斐波那契数列二、斐波那契查找算法 前言 学数据结构的时候被斐波那契查找算法困扰,刚开始难以理解,脑袋有点懵,翻看了许多大佬的博文,加上自己的理解发了出来 一、斐波那契数列 我们先看什么是斐波那契数列 有这样一个数列:1,1,2,3,5,8,13,21… 我们可以尝试找一下规律,并将后面的数字都按照这种规律在数列中呈现 我们发现从第3个数字开始,每个数字等于前两个数字之和 所以第n个数字 f(n) = f(n-1)+f(n-2) 符合这样规律的数列我们称之为斐波那契数列 二、斐波那契查找算法

wenwenaier的博客 2512

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

七大查找之斐波那契查找

文章目录1.基本思想2.算法步骤3.代码实现3.1.算法实现3.2.测试程序4.实验结果 1.基本思想 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。(mid的关系式不同) 斐波那契查找同样是查找算法家族中的一员,它要求数据是有序的(升序或降序)。斐波那契查找采用和二分查找/插值查找相似的区间分割策略,都是通过不断的分割区间缩小搜索的范围 。(分治法) 斐波那契数列(Fibonacci sequ

qq_46359697的博客 3959

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

查找算法之四 斐波那契查找(C++版本)

斐波那契查找 算法介绍: 斐波那契搜索就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为Fn,完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。 查找步骤: 同二分查找 实现代码: void GetFibonacciArr...

xupeng1644的博客 2108

三种查找算法比较:折半查找(二分查找)、插值查找、斐波那契查找

此文章为介绍基于二分思想的查找算法实现及比较实验。

XIAO_yux的博客 3123

Python查找算法(四)------ 斐波那契查找

算法简介 斐波那契数列,又称为黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、.......,在数学上,斐波那契被递归方法如下定义:F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2) (n>=2)。该数列越往后相邻的两个数的比值越趋向与黄金比例值(0.618)。 算法描述 斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素的数F[n],将原查找表扩展为长度为F[n],完成后进行斐波那契分...

stybill的博客 4万+
上一篇: spring Aop基于注解的配置一篇文章带你快速了解入门
下一篇: jdbcTemplate如何交给spring管理一遍文章让你快速了解
来来爱编程
博客等级 码龄7年 375粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值