你好!斐波那契查找【JAVA】

1.有幸遇见

斐波那契查找算法,也称黄金分割查找算法,是一种基于斐波那契数列的查找算法。与二分查找类似,斐波那契查找也是一种有序查找算法,但它的查找点不是中间位置,而是根据斐波那契数列来确定,因此又称为黄金分割查找。

2.原理讲解 

斐波那契(黄金分割法)原理:斐波那契查找原理与前两种相似,仅仅改变了中间结点(mid)的位置, mid不再是中间或插值得到,而是位于黄金分割点附近,即mid=low+F(k-1)-1(F代表斐波那契数列)。

注:顺序表长度n不一定刚好等于F[K]-1,所以需要将原来的顺序表长度n增加至F[k]-1。

3.构建斐波那契数组 

 public static int[] fib() {
        int[] f = new int[maxSize];
        f[0] = 1;
        f[1] = 1;
        for (int i = 2; i < f.length; i++) {
            f[i] = f[i - 1] + f[i - 2];
        }
        return f;
    }

4.痛苦的过程

  /**
     * 斐波那契算法实现
     * @param arr 目标数据
     * @param value 目标数
     * @return 目标数的下标
     */
    public static int fibonacciSearch(int[] arr, int value) {
        int left = 0;
        int right = arr.length - 1;
        int k = 0;//斐波那契分割数值的下标
        int middle = 0;//中间值
        int[] f = fib();//获取斐波那契数列

        //获取斐波那契的下标
        while (right > f[k] - 1) {
            k++;
        }

        //拷贝斐波那契数组
        int[] temp = Arrays.copyOf(arr, f[k]);

        for (int i = right + 1; i < temp.length; i++) {
            temp[i] = arr[right];
        }

        while (left < right) {//终止循环的条件
            middle = left + f[k - 1] + 1;
            if (value < temp[middle]) {//继续向数组的左边查找
                right = middle - 1;
                k--;
            } else if (value > temp[middle]) {//继续向数组的右边查找
                left = middle + 1;
                k -= 2;
            } else {//找到
                if (middle < right) {
                    return middle;
                } else {
                    return right;
                }
            }
        }
        return -1;
    }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/216792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于阿基米德优化算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于阿基米德优化算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于阿基米德优化算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阿基米德优化算法4.实验参数设定5.算…

【UE5】使用场系统炸毁一堵墙

效果 步骤 1. 新建一个空白项目 2. 新建一个Basic关卡&#xff0c;然后添加一个第三人称游戏和初学者内容包到内容浏览器 3. 在场景中添加一堵墙 4. 选项模式选择“破裂” 点击新建 新建一个文件夹用于存储几何体集 点击“统一” 最小和最大Voronoi点数都设置为100 点击“破…

Navicat Premium 16.3.3 Windows x64 Crack

增强您的表现。 Navicat 16 具有许多改进和功能&#xff0c;可以满足您的数据库开发需求。凭借 100 多项增强功能和全新界面&#xff0c;您可以探索构建、管理和维护数据库的新方法。构建时考虑到可用性。 Navicat 16 引入了许多 UI/UX 改进&#xff0c;以最大限度地提高您的效…

选择排序、插入排序、希尔排序

1.选择排序 算法描述 将数组分为两个子集&#xff0c;排序的和未排序的&#xff0c;每一轮从未排序的子集中选出最小的元素&#xff0c;放入排序子集 重复以上步骤&#xff0c;直到整个数组有序 选择排序呢&#xff0c;就是首先在循环中&#xff0c;找到数组中最小的元素。在…

Ubuntu20.04使用SVN(Rabbitvcs)

原文&#xff1a;https://blog.csdn.net/u014552102/article/details/129914787 1.安装Rabbitvcs sudo apt-get install rabbitvcs-nautilus sudo reboot 安装完后&#xff0c;选中一个文件夹右键&#xff0c;即可看到相关操作&#xff0c;没有的可以重启一下。 2.添加这个p…

微服务保护

1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff0c;因此也会被阻塞。此时&…

Python + Appium框架原生代码实现App自动化测试

Step1&#xff1a;首先介绍下pythonappium的框架结构 如下截图所示 . (1)&#xff1a;apk目录主要放置待测app的apk资源&#xff1b; (2)&#xff1a;config目录主要放置配置文件信息&#xff0c;包含&#xff1a;数据库连接配置、UI自动化脚本中所需的页面元素信息及app启…

根据源码梳理Redisson的可重入、锁重试以及看门狗机制原理

Redisson可重入的原理 在上篇文章中我们已经知道了除了需要存储线程标识外&#xff0c;会额外存储一个锁重入次数。那么接下来我们查看使用Redisson时&#xff0c;Redisson的加锁与释放锁流程图。 当开始获取锁时&#xff0c;会先判断锁是否存在&#xff0c;如果存在再进行判断…

unity程序中的根目录

在unity程序中如果要解析或保存文件时&#xff0c;其根目录为工程名的下一级目录&#xff0c;也就是Assets同级的目标

使用Redis构建简易社交网站(2)-处理用户关系

目的 本文目的&#xff1a;实现用户关注和取消关注功能。&#xff08;完整代码附在文章末尾&#xff09; 相关知识 在我之前的文章 《使用Redis构建简易社交网站(1)-创建用户与动态界面》中提到了如何实现简易社交网站中创建新用户和创建新动态功能。 那这篇文章将教会你掌…

代币化:2024年的金融浪潮预示着什么?

自“TradFi”领袖到加密专家&#xff0c;各方预测代币化机会高达数十万亿。虽然已有引人注目的用例&#xff0c;但与未来几年可能在链上转移的大量数字化资产相比&#xff0c;这些仅是冰山一角。 代币化何时会变为洪流&#xff1f;什么阻碍了其发展&#xff1f; 今年10月&…

网络初识:局域网广域网网络通信基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、局域网LAN是什么&#xff1f;二、广域网是什么&#xff1a;三. IP地址四.端口号五.认识协议5.1五元组 总结 前言 一、局域网LAN是什么&#xff1f; 局域网…

JVM简单了解内存溢出

JVM oracle官网文档&#xff1a;https://docs.oracle.com/en/java/javase/index.html 什么是JVM JVM(Java Virtual Machine)原名Java虚拟机&#xff0c;是一个可以执行Java字节码的虚拟计算机。它的作用是在不同平台上实现Java程序的跨平台运行&#xff0c;即使在不同的硬件…

【驾校管理系统源码】基于Springboot+Vue个人驾校预约管理系统

&#x1f345; 简介&#xff1a;500精品计算机源码学习 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学习内容欢迎领取&#xff1a; Eclipse运行教学&#xff1a; Idea运行项目教学&#xff1a; Pycharm调试项目教学&#…

用Python手把手教你实现一个爬虫(含前端界面)

目录 前言爬虫基本原理使用Python的requests库发送HTTP请求使用BeautifulSoup库解析HTML页面使用PyQt5构建前端界面实现一个完整的爬虫程序结语 前言 随着互联网的飞速发展&#xff0c;再加上科技圈的技术翻天覆地的革新&#xff0c;互联网上每天都会产生海量的数据&#xff…

数据库更换版本

目录 0.前言 1.官网下载MySQL 2.配置初始化文件my.ini 3.初始化MySQL 4.安装mysql服务并启动修改密码 5.配置环境变量​编辑 0.前言 心累&#xff0c;为了完成实验&#xff0c;必须使用8.0版本导致我更新版本的时候&#xff0c;把sqlyog干崩溃了&#xff0c;什么版本不兼…

分清社保、医保、新农合

社保中的大头是养老保险&#xff0c;从上图可知成都每个月最低849.2元&#xff0c;对于底层人民来说价格不菲&#xff0c;但对应的医保才107元&#xff0c;那么能不能只交医保呢&#xff1f; 分三种情况&#xff1a; 1、如果我们购买的是城镇职工医疗保险&#xff0c;公司买的也…

<JavaEE> 单例模式的两种实现:“饿汉模式”和“懒汉模式”

目录 一、单例模式概述 二、“饿汉模式”实现单例模式 三、“懒汉模式”实现单例模式 3.1 单线程下的“懒汉模式” 3.2 多线程下的“懒汉模式” 一、单例模式概述 1&#xff09;什么是单例模式&#xff1f; 单例模式是一种设计模式。 单例模式可以保证某个类在程序中只存…

电源自动测试系统| 电源模块温度循环怎么测试?

在一些应用领域&#xff0c;电源模块会在极端环境温度条件下工作。为了确保电源在高低温环境下可以正常运行&#xff0c;满足设备需求&#xff0c;需要对电源模块进行温度循环测试。 温度循环测试是指电源模块经过升温、保温、降温等多次循环试验来检测其在温度变化下的耐热性、…

解决在Linux中进行redis的主从复制时出现的从机可以获取到主机的信息,主机获取不到从机的信息~

主机&#xff1a; 从机1&#xff1a; 从机2&#xff1a; 出现上述的原因是我在redis.conf中设置了密码&#xff0c;那么就导致了我在进行主从复制时&#xff0c;需要进行密码验证&#xff0c;然后我在网上查阅了很多资料&#xff0c;有的说让在从机中指定密码&#xff0c;有的说…