当前位置: 首页 > news >正文

斐波那契查找算法

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

F[k]=F[k-1]+F[k-2],==>(F[k]-1) = (F[k-1]-1)+(F[k-2]-1)+1

说明:只要顺序表的长度为F[k]-1,则可以将该表分成长度为F[k-1]-1和F[k-2]-1的两段

从而得到中间位置mid = low+F(k-1)-1

package day7_11;import java.util.Arrays;public class Test {public static int maxSize = 20;public static void main(String[] args) {int[] arr =  {1,8,10,89,1000,1234};int i = fibSearch(arr, 1234);System.out.println(i);}public static int[]fib(){int[] f = new int[maxSize];f[0] = 1;f[1] = 1;for(int i=2;i<maxSize;i++){f[i] = f[i-1] + f[i-2];}return f;}//使用非递归的方式/**** @param a 数组* @param key 我们需要查找的关键码(值)* @return  返回对应的下标,如果没有-1*/public static int fibSearch(int[] a,int key){int low = 0;int high = a.length-1;int k =0;int mid = 0;int f[] = fib();while (high > f[k] -1 ){k++;}//因为f[k]值可能大于a的长度,因此我们需要使用Arrays类,构造一个新的数组,并指向a[]//不足的部分会使用0填充int[] temp = Arrays.copyOf(a,f[k]);//实际上需求使用a数组最后的数填充temp//temp = {1,8,10,89,1000,1234,0,0,0} => {1,8,10,89,1000,1234,1234,1234,1234}for(int i=high+1;i<temp.length;i++){temp[i] = a[high];}//使用while来循环处理,找到我们的数keywhile (low<=high){mid = low+f[k-1]-1;if(key<temp[mid]){ //我们应该继续向数组的前面查找high = mid - 1;//为什么是k-1//说明//1.全部元素 = 前面的元素 + 后边的元素//2.f[k] = f[k-1] + f[k-2]//因为前面有f[k-1]个元素,所以可以继续拆分f[k-1] = f[k-2] + f[k-3]//即在f[k-1]的前面继续查找k--//即下次循环mid = f[k-1-1]-1k--;}else if(key>temp[mid]){low = mid + 1;//为什么是k-=2//说明//1.全部元素 = 前面的元素+后边元素//2.f[k] = f[k-1] + f[k-2]//3.因为后面我们有f[k-2]所以可以继续拆分f[k-1] = f[k-3] + f[k-4]//4.即在f[k-2]的前面进行查找k-=2//5.即下次循环mid = f[k-1-2]-1k -=2;}else{ //找到//需要确定,返回的是哪个下标if(mid<=high){return mid;}else{return high;}}}return -1;}}

相关文章:

斐波那契查找算法

斐波那契查找原理&#xff0c;仅仅改变了中间结点(mid)的位置&#xff0c;mid不再是中间或插值得到,而是位于黄金分割点附近&#xff0c;即midlowF(k-1)-1(F代表斐波那契数列) F[k]F[k-1]F[k-2],>(F[k]-1) (F[k-1]-1)(F[k-2]-1)1 说明:只要顺序表的长度为F[k]-1,则可以将该…...

CAN总线学习

can主要用于汽车、航空等控制行业&#xff0c;是一种串行异步通信方式&#xff0c;因为其相较于其他通信方式抗干扰能力更强&#xff0c;更加稳定。原因在于CAN不像其他通信方式那样&#xff0c;以高电平代表1&#xff0c;以低电平代表0&#xff0c;而是通过电压差来表示逻辑10…...

zookeeper基础知识学习

官网&#xff1a;Apache ZooKeeper 下载地址&#xff1a;Index of /dist/zookeeper/zookeeper-3.5.7Index of /dist/zookeeperIndex of /dist/zookeeper/zookeeper-3.5.7 ZK配置参数说明&#xff1a; 1、tickTime2000&#xff1a;通讯心跳时间&#xff0c;zookeeper服务器与客…...

C语言内存管理深度解析面试题及参考答案(2万字长文)

在嵌入式面试时,C语言内存管理是必问面试题,也是难点,相关知识点可以参考: C语言内存管理深度解析​​​​​​​ 下面整理了各种类型的C语言内存管理的面试题: 目录 全局变量和局部变量在内存中分别存储在哪个区域? 静态变量和全局变量有什么区别? 什么是作用域?…...

C++基础(二)

目录 1.类和对象 1.1类的定义 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.类的默认成员函数 4.1构造函数 4.2析构函数 4.5运算符重载 1.类和对象 1.1类的定义 类的定义格式 class为定义类的关键字&#xff0c;Stack为类的名字&…...

R 绘图 - 中文支持

R 绘图 - 中文支持 R 是一种广泛使用的统计和数据分析编程语言&#xff0c;它提供了强大的绘图功能。然而&#xff0c;R 的默认设置并不直接支持中文&#xff0c;这可能会在使用 R 进行绘图时造成困扰&#xff0c;尤其是当需要在图表中添加中文标签或标题时。本文将介绍如何在…...

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-标题菜单及游戏结束界面(九)

文章目录 开发思路标题菜单界面标题菜单脚本代码结束菜单界面结束菜单脚本代码 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击&#xff08;一&#xff09; 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件&#xff08;二&#xff09; 使用Godot4组件制作竖版…...

[终端安全]-6 移动终端之应用程序安全

笔者在终端安全专题前面的文章中介绍了移动终端硬件安全和操作系统安全&#xff0c;本文主要介绍移动终端应用安全。在本文最前面&#xff0c;笔者想先解答一位朋友的疑问&#xff0c;为什么需要费心打造一个完整的面面俱到的安全体系&#xff1f; 1 移动终端安全的重要性 移…...

基于望获实时Linux的高性能运动控制器适配

在快速迭代的工业自动化与机器人控制领域&#xff0c;高性能运动控制器无疑是实现极致精度与效率的核心引擎。实时操作系统&#xff08;Real-Time Operating System,RTOS&#xff09;凭借其低延迟与高度确定性的特性&#xff0c;成为这些高精度、高速度应用的首选平台。 望获…...

电气工程VR虚拟仿真实训平台以趣味化方式增强吸引力

在工业4.0时代和教育信息化的双重推动下&#xff0c;我们致力于推动实训课件的跨界合作与共创。VR实训课件不仅促进了不同领域、不同行业之间的紧密合作&#xff0c;更让学习变得生动直观。我们凭借3D技术生动、直观、形象的特点&#xff0c;开发了大量配套3D教材&#xff0c;让…...

数据结构(单链表(1))

前言 线性表中有着许多的结构&#xff0c;如顺序表和链表。而单链表则是链表的最基础的一种形式&#xff0c;下面就让我们对其做一个了解。 概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次…...

STM32第十八课:SPIFlash

目录 需求一、SPI概要二、SPI配置1.开时钟2.配置IO3.配置&使能SPI 三、FLash操作函数1.SPI发送数据2.FLASH写使能3.FLASH等待操作完成4.FLASH页写操作5.FLASH读操作6.FLASH扇区擦除 四、需求实现 需求 通过SPI控制FLash进行数据的保存和删除。 一、SPI概要 在我们使用UA…...

如何使用IPython的并行计算能力处理大数据

目录 引言IPython概述 什么是IPythonIPython的特点 并行计算简介 什么是并行计算并行计算的优势 IPython的并行计算功能 IPython.parallel模块IPython并行架构 IPython的安装与配置 安装IPython配置并行环境 IPython并行计算的基础 任务分发与负载均衡核心概念&#xff1a;Cli…...

前端热门面试题二

你有使用过哪些前端构建工具&#xff08;如Webpack、Gulp、Rollup&#xff09;&#xff1f;并谈谈它们的特点和优势。 在前端开发中&#xff0c;构建工具扮演着至关重要的角色&#xff0c;它们能够自动化处理各种任务&#xff0c;如代码压缩、模块打包、代码转换、静态资源管理…...

Android TabLayout+ViewPager2如何优雅的实现联动详解

一、介绍 Android开发过程中&#xff0c;我们经常会遇到滑动导航栏的做法&#xff0c;之前的做法就是我们通过ViewGroup来转动&#xff0c;然后通过大量的自定义来完成&#xff0c;将导航栏item与viewpage 滑动&#xff0c;达到业务需求 二、现实方案 通过介绍&#xff0c;我…...

k8s快速部署一个网站

1&#xff09;使用Deployment控制器部署镜像&#xff1a; kubectl create deployment web-demo --imagelizhenliang/web-demo:v1 kubectl get deployment,pods[rootk8s-matser ~]# kubectl get pods NAME READY STATUS RESTARTS A…...

期货量化交易客户端开源教学第四节——交易接口协议

指令介绍: 01----09:服务端发送到客户端指令 10----49:客户端发送操作指令 50----59:客户端与服务端通讯指令 60----99:股票接口与服务端交互指令 --------------------------------------------------- 02:商品行情 03:用户信息接收 04:用户资产信息接收 ----发送到…...

M1000 4G蓝牙网关:高速稳定,赋能物联网新体验

桂花网M1000的4G移动网络功能主要体现在以下几个方面&#xff1a; 一、高速稳定的数据传输 高速率&#xff1a;M1000支持4G移动网络&#xff0c;能够实现高速的数据传输。根据4G网络的技术标准&#xff0c;其理论上的最大下行速率可达到数百Mbps&#xff08;如TD-LTE在20MHz带…...

中国高端水果元宇宙

高档榴莲通常指的是品质上乘、口感极佳、产地知名且价格较高的榴莲品种。榴莲因其独特的风味和营养价值而被誉为“水果之王”&#xff0c;在东南亚尤其受欢迎。以下是一些被认为是高档榴莲的品种&#xff1a; 1.**猫山王榴莲&#xff08;Musang King or Mao Shan Wang&#xff…...

MySQL:库操作

1. 创建数据库 create database [if not exists] name [create_specification], [create_specification]... []内为可选的选项 create_specification: character set charset_name -- 指定数据库采用的字符集 -- 数据库未来存储数据 collate collation_name -- 指定数据库字符…...

Python通达信数据获取完整指南:mootdx让金融数据分析变得简单高效

Python通达信数据获取完整指南&#xff1a;mootdx让金融数据分析变得简单高效 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为获取A股市场数据而烦恼吗&#xff1f;mootdx作为一款纯Python开…...

Win11Debloat系统优化工具使用指南

Win11Debloat系统优化工具使用指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and customize your Windows experien…...

4步实现零代码黑苹果配置:智能工具如何让技术门槛归零

4步实现零代码黑苹果配置&#xff1a;智能工具如何让技术门槛归零 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾在黑苹果配置的海洋中迷失方…...

2026年10款高效AI写小说软件全面测评,快速解决卡文与大纲难题(含实测体验)

经常有新人问我&#xff1a;现在ai写小说到底靠不靠谱&#xff1f;是不是生成的都是没有感情的机器味&#xff1f; 说实话&#xff0c;前两年我觉得不行&#xff0c;但到了2026年&#xff0c;如果你还不会用AI辅助&#xff0c;真的会比别人慢半个身位。从灵感枯竭到大纲崩坏&a…...

AI辅助开yun架构设计:让快马平台智能生成弹性可扩展的服务代码

在云原生架构设计中&#xff0c;弹性伸缩和容错能力是应对高并发场景的核心需求。最近我在设计一个秒杀系统的商品查询服务时&#xff0c;深刻体会到AI辅助开发带来的效率提升。下面分享如何通过智能工具快速实现关键功能模块。 业务逻辑接口设计要点 商品查询服务作为秒杀系统…...

4个硬核技巧:用GHelper实现华硕笔记本性能与续航的完美平衡

4个硬核技巧&#xff1a;用GHelper实现华硕笔记本性能与续航的完美平衡 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Stri…...

springCloud_day06

目录 MQ 入门 - 01.MQ 课程介绍 MQ 入门 - 02. 初识 MQ - 同步调用优缺点 MQ 入门 - 03. 初识 MQ - 异步调用优缺点 MQ 入门 - 04. 初识 MQ - 技术选型 MQ 入门 - 05.RabbitMQ - 安装部署 问题:设置的账户密码是什么? MQ 入门 - 06.RabbitMQ - 快速入门 MQ 入门 - 07.R…...

【CAPL实战】LIN校验和自动化测试:从函数解析到脚本验证

1. LIN校验和的核心概念与CAPL函数解析 第一次接触LIN总线校验和测试时&#xff0c;我也曾被各种专业术语绕得头晕。简单来说&#xff0c;校验和就像是给数据包贴上的"防伪标签"——当LIN报文从主机发往从机时&#xff0c;这个标签能帮我们确认数据在传输过程中是否…...

GLM-4.1V-9B-Base惊艳输出:对‘抽象艺术画’的风格、情绪、创作意图推测

GLM-4.1V-9B-Base惊艳输出&#xff1a;对抽象艺术画的风格、情绪、创作意图推测 1. 视觉理解模型的新突破 GLM-4.1V-9B-Base作为智谱开源的视觉多模态理解模型&#xff0c;在艺术领域展现出令人惊艳的分析能力。不同于传统图像识别工具&#xff0c;这款模型能够深入解读抽象艺…...

SUNFLOWER MATCH LAB 赋能软件测试:自动化生成植物图像测试用例

SUNFLOWER MATCH LAB 赋能软件测试&#xff1a;自动化生成植物图像测试用例 如果你在软件测试&#xff0c;特别是图像处理或计算机视觉相关的测试领域工作过&#xff0c;一定对寻找合适的测试图像这件事感到头疼。为了测试一个图像分类算法&#xff0c;你可能需要满世界找各种…...