当前位置: 首页 > 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 -- 指定数据库字符…...

别再只会用T检验了!用Python+SciPy搞定Z检验,5分钟判断两组数据差异是否显著

用Python实战Z检验&#xff1a;5分钟判断业务数据差异显著性当你手头有两组A/B测试结果或不同版本的产品指标时&#xff0c;如何快速判断它们的均值差异是否具有统计学意义&#xff1f;很多数据分析师的第一反应是使用T检验&#xff0c;但当你面对大样本数据时&#xff0c;Z检验…...

DVWA通关教程2

本博客所有网络安全相关教程、漏洞原理、渗透实操、攻防技术等内容&#xff0c;仅用于合法安全学习、白帽技术交流、企业授权安全测试。 所有技术严禁用于未授权探测、非法入侵、数据窃取、网络攻击等任何违反《中华人民共和国网络安全法》的违法行为。 任何个人利用本文内容实…...

超星***滑块逆向分析

本篇文章仅用于交流与学习&#xff0c;严禁用于任何商业与非法用途&#xff01;否则由此产生的一切后果均与作者无关&#xff01;如有侵权&#xff0c;请联系作者本人进行删除。感谢关注&#xff01;您的关注和点赞就是我的动力1.逆向目标aHR0cHM6Ly92OC5jaGFveGluZy5jb20v2.逆…...

小模型爆发出惊人能量!斯坦福开源框架AgentFlow如何实现复杂任务中的可靠工具使用?

本文介绍了斯坦福大学开源的模块化智能体框架AgentFlow&#xff0c;它通过独特的架构设计和训练方法&#xff0c;在工具集成和规划能力上取得了突破性进展。AgentFlow以Qwen-2.5-7B-Instruct为基础&#xff0c;在10个基准测试中表现突出&#xff0c;超越了大50倍的模型和GPT-4o…...

告别手慢无!自动化抢票系统让你轻松搞定热门演出门票

告别手慢无&#xff01;自动化抢票系统让你轻松搞定热门演出门票 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到心仪的演唱会门票而烦…...

牛牛走迷宫【牛客tracker 每日一题】

牛牛走迷宫 时间限制&#xff1a;1秒 空间限制&#xff1a;256M 网页链接 牛客tracker 牛客tracker & 每日一题&#xff0c;完成每日打卡&#xff0c;即可获得牛币。获得相应数量的牛币&#xff0c;能在【牛币兑换中心】&#xff0c;换取相应奖品&#xff01;助力每日有…...

STM32F4电池电量监测实战:用HAL库和ADC DMA,从硬件分压到软件滤波全流程解析

STM32F4电池电量监测实战&#xff1a;从硬件设计到软件滤波的工程化实现 在物联网设备和便携式电子产品的开发中&#xff0c;精确监测电池电量是一个看似简单却暗藏玄机的关键技术点。许多开发者都曾遇到过这样的困境&#xff1a;实验室测试时电量显示精准稳定&#xff0c;一旦…...

深度学习的缺失数据革命:使用MIDAS实现高效多重插补

深度学习的缺失数据革命&#xff1a;使用MIDAS实现高效多重插补 【免费下载链接】MIDAS Multiple imputation utilising denoising autoencoder for approximate Bayesian inference 项目地址: https://gitcode.com/gh_mirrors/midas3/MIDAS 在数据科学和机器学习领域&a…...

【软件架构师-综合题(3)】软件工程知识点

软件工程这一章围绕一个核心问题展开&#xff1a;软件不是靠灵感写出来的&#xff0c;而是要经过需求、设计、实现、验证、演化这一整条工程链路&#xff0c;被稳定地组织起来。 顺着这条链路去整理&#xff0c;第三章更适合分成六个层次来看&#xff1a;先看开发方法和开发模型…...

如何高效下载B站视频:Python开源工具bilibili-downloader完全指南

如何高效下载B站视频&#xff1a;Python开源工具bilibili-downloader完全指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader B站视频…...