二分查找、插值查找、斐波那契查找

Android TV开发:RecyclerView焦点控制实践与优化 在Android TV应用开发中,焦点控制是提升用户体验的关键技术。不同于移动端触摸交互,TV端通过遥控器方向键导航,需要精确的焦点管理机制。RecyclerView作为动态列表的核心组件,其焦点控制涉及视图复用、导航逻辑和视觉反馈等核心技术点。通过合理配置focusable属性、自定义焦点查找算法以及优化动画性能,开发者可以解决TV端常见的焦点跳转异常、视觉反馈延迟等问题。特别是在视频点播、智能家居控制等场景中,良好的焦点控制能显著提升操作效率。本文结合网格布局焦点环绕、分页加载焦点保持等实战案例,深入解 阅读详情

1 二分查找

在有序表中,取中间记录作为比较对象,将其与给定值相比较,若其等于给定值,则查找成功;若其小于给定值,则在中间记录的右半区继续查找;若其大于给定值,则在中间记录的左半区继续查找。不断重复以上过程,直到查找成功或无匹配记录。

使用该查找方法的前提条件在于,线性表中的数据必须有序,且必须采用顺序存储的方式。

var array = [1,2,3,4,5,6,7,8,9]

function search(value){
    let low = 0, high = array.length - 1;
    let mid;

    while (low <= high){
        mid = parseInt((low + high)/2);
        if (array[mid] > value){
            high = mid - 1;
        }else if (array[mid] < value){
            low = mid + 1;
        }else{
            break;
        }
    }

    if (array[mid] === value) return mid;
    return -1;
}

console.log('查找3',search(3));
console.log('查找8',search(8));
console.log('查找10',search(10));

这里写图片描述

2 插值查找

插值查找与二分查找的原理类似,区别就在于mid值的选取。
在插值查找中,mid = low + ( (key - a[low]) / (a[high] - a[low]) ) * (high - low)。该算法对表长较大,而关键字分布比较均匀的情况下,性能较高,而对于分布不均匀的数据,则不太适用。

var array = [1,2,3,4,5,6,7,8,9]

function search(value){
    let low = 0, high = array.length - 1;
    let mid;

    while (low <= high){
        mid = parseInt( low + (value-array[low]) / (array[high]-array[low]) * (high - low) );
        if (array[mid] > value){
            high = mid - 1;
        }else if (array[mid] < value){
            low = mid + 1;
        }else{
            break;
        }
    }
    if (array[mid] === value) return mid;
    return -1;
}

3斐波那契查找

顾名思义,该查找方法利用了斐波那契数列,该方法的主要思路为,先在斐波那契数列F中找到第k项,使其满足,F[k]-1 > 有序数组的最大索引号 > F[k-1]-1,然后将数组扩充到长度为F[K]-1,并使扩充项的值都等于有序数组的最后一项。
分割点的索引为mid = low + F[K-1]-1,此时有序数组被mid划分为两段,左段长度为F[K-1]-1,右段长度为F[k-2]-1。若查找值大于mid值,则low等于mid+1,而k = k - 2;若查找值小于mid,则high = mid -1,k =k -1.

这里写图片描述

var array = [1,2,3,4,5,6,7,8,9]
var F = [0,1,1,2,3,5,8,13,21,34]

function search(value){
    let low = 0, high = array.length - 1,n= array.length - 1;
    let mid,k=0;

    while (high > F[k]-1){  //寻找第k项
        k++;
    }

    for (let i=high; i<F[k]-1; i++){   //补全有序数组
        array[i] = array[high];
    }

    while (low <= high){
        mid = low + F[k-1] -1;
        if (array[mid] > value){
            high = mid - 1;
            k -= 1;         //长度缩减为 F[k-1] -1
        }else if (array[mid] < value){
            low = mid + 1;
            k -= 2;         //长度缩减为 F[k-2] -1
        }else{
            if (mid <= n)  //相等则找到位置
                return mid;
            else           //大于原始长度,则说明等于数组最后一项
                return n;
        }
    }

    return -1;
}
使用IDF和VSCode构建ESP32的开发环境 本文主要介绍构建使用IDF和VS-CODE 工具构建ESP32的开发环境的详细步骤,还应用IDF和VS CODE创建ESP32的项目文件,并实现编译和下载功能。 阅读详情

相关推荐

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 668

二分查找与插值查找

一、二分查找(折半查找) 思路 考虑数组中可能有等值元素 二、插值查找 介绍 插值查找算法: 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找 插值索引:int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ; 对比 1) 对于数据量较大,关键字分布比较均匀的...

Ben_ming的博客 729

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

汇编语言与接口技术(第4版)清华大学出版社 第2章 80*86微处理器 课后题答案

m0_51658788的博客 3606

二分查找及插值查找

二分查找和插值查找都是基于减而治之的原理 1)细节:二分查找的范围的下标:lo和hi代表[lo,hi),因此,选择mid的时候,两部分是[lo,mid),和[mid+1,hi);  插值查找的含义类似于在字典中确定一个字母的范围,比如选择b的话,会在较前的页码处查找,这里,字母相当于数组的下标, 而页码相当于要查找的元素; 2)效率:查找对数值的规模进行折半,因此二分查找的时间复杂度为log

若砚的博客 1116

IFIX5.8在Win10系统下的安装避坑指南

本文提供了IFIX5.8在Windows 10系统下的详细安装教程与避坑指南。针对常见的驱动缺失、UAC拦截及兼容性报错等问题,文章从安装前准备、分步安装流程到安装后配置与驱动修复,给出了系统性的解决方案,帮助工控从业者顺利完成部署。

f6g7h8i9j的博客 364

C#上位机与MES系统数据对接:从协议选型到安全传输的实战解析

本文详细解析了C#上位机与MES系统数据对接的全过程,从协议选型到安全传输的实战技巧。针对工业互联网场景下的数据对接挑战,提供了RESTful API、MQTT和OPC UA等协议的选型建议,并分享了健壮性设计、异常处理和安全传输的实用代码示例,帮助开发者高效实现数据上传与系统集成。

weixin_30566063的博客 105

算法-01-二分查找/插值查找

一.顺序查找在链表中常用,适合用来解决小规模数据,比较灵活简便。当数据较多时非常不推荐,查询速度非常慢。二. 二分查找2.1 二分查找简介:通过将一组有序数据不断地分成两部分以缩小查询区间的查询方法 使用条件:数据有序2.2二分查找的特点:二分查找法优点是比较次数少,查找速度快,平均性能好,占用系统内存较少2.3 二分查找的查询方式及其原理:二分查找的查询步骤:步骤一:检查表中间数据是否是目标数据

CycloneKid的博客 951

YOLOv11 改进 | 模块即插即用

YOLOv11 是一种单阶段目标检测算法,其核心设计目标在于实现检测速度与精度的平衡。其架构延续了 YOLO 系列“端到端”检测的思路,通过统一的网络结构完成特征提取、多尺度特征融合及最终的边界框预测与分类任务。骨干网络(Backbone)颈部网络(Neck)和检测头(Head)。骨干网络负责从输入图像中提取多层次的语义特征。

u012133341的博客 3122

插值插找(对比二分法查找)

插值查找: 二分查找其效率已经远远高于线性查找,但是我们还可以通过插值查找对二分法查找进行优化。 在二分查找中,mid是(left+right)/2,我i们可以按比例缩小范围,使得我们可以经过更少的次数完成查找。 将mid设置为:left + (right-left)*(value-arr[left])/ (arr[right] - arr[left])。需要注意的是,我们的数组依旧是有序数组,当我们的数组元素全部一样时,此方法不适用。因为除数为0了。 代码如下: public static ArrayLi

weixin_42596738的博客 571

【麒麟桌面系统】企业微信提示当前副设备的企业微信版本较低

银河麒麟系统中登录企业微信时出现"副设备版本较低"的报错,可通过两种方案解决:1)更新最新版企业微信,需替换软件源并刷新软件商店安装8.0-50-4.1.26.6019kylin5版本;2)安装内测5.0版本企业微信,需下载deb包后使用sudo dpkg命令安装。文章还提供了常见问题解决表和长期维护建议,包括系统更新检查、软件源验证等维护项目及具体操作指南。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2272

Lumerical 教程,包含作者个人理解及相关设计案例 (目前共计184篇,持续更新中)

4138。

u011699626的博客 1620

数据结构与算法 - 二分查找优化:插值查找与斐波那契查找

摘要 本文探讨了两种优化二分查找的算法:插值查找和斐波那契查找。插值查找通过插值公式预测目标位置,在数据均匀分布时可达O(log log n)时间复杂度,但可能退化到O(n);斐波那契查找利用黄金分割原理,保持稳定O(log n)复杂度,适合非均匀数据。文章首先回顾了二分查找的基本思想(O(log n)时间复杂度),然后详细介绍了这两种优化算法的核心原理、实现代码、时间复杂度分析及适用场景。通过比较不同算法的特点,帮助开发者根据数据特性选择最优查找策略,提升检索效率。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

scottplot5中使用signalXY图,如何更新数据?

🏆本文收录于《优快云问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 2440

【数据结构与算法 12】二分查找、插值查找、斐波那契查找

一、前言 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如在编译程序中符号表的查找。 本文简单介绍二分查找、插值查找、斐波那契查找。 查找算法分类: 1、静态查找和动态查找 2、无序查找和有序查找 二、二分查找 1、基本思想 也称为折半查找,属于有序查找算法。用给定值value先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等,则查找成功;若不相等,再根据K与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束

学Java,找哪吒 5129

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java 二分查找 插值查找 斐波那契查找

常用的查询算法: 顺序查找 二分查找 插值查找 斐波那契查找 树表查找 分块查找 哈希查找 索引查询 深度搜索&&广度搜索 一、二分查找 int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; // 注意 while(left <= right) { // 注意 int mid = left+(right - left) /

weixin_44728238的博客 204

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

二分查找算法,插值查找,斐波那契查找

文章目录二分查找插值查找斐波那契查找 二分查找 原理:给定一个有序的数组,每次从中间开始查找,判断查找的val与中间值的比较,大于继续向后查找,小于向前查找。 步骤: 得到一个有序的数组。 计算中间索引,mid = (left + right)/ 2 与待查找的值进行比较,相等返回mid。 不相等,向左或向右重复2,3步。 JAVA代码实现: /** * 二分查找 * * @pa...

Dichotomy_的博客 410

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

5.顺序查找、二分查找、插值查找、斐波那契查找

顺序查找、二分查找、插值查找、斐波那契查找的图解及Java实现

qq_45879990的博客 511

java---查找算法(二分查找,插值查找,斐波那契[黄金分割查找] )-----详解 (ᕑᗢᓫ∗)˒

int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left]) -----》相当于公式。数组 arr = [1, 2, 3, ......., 100] 假如我们需要查找的值 1 使用二分查找的话,我们需要多次递归,才能找到 1。前提条件: 所要查找的数组必须为有序,如果不是有序要事先排序好。相对二分查找,插值查找效率更高,但是与二分查找一样需要数组有序。比如我们查找的值 100。

2302_79862386的博客 1788

查找算法(二分查找,插值查找,斐波那契查找)

目录二分查找思路代码插值查找思路代码斐波那契查找(黄金分割法查找)思路代码 二分查找 思路 首先确定该数组中间的下标。 mid = (left + right) / 2 然后让需要查找的数 findVal 和 arr[mid] 进行比较, 如果findVal > arr[mid],说明要查找的数在mid的右边,递归向右; 如果findVal < arr[mid],说明要查找的数在mid的左边,递归向左; 如果findVal == arr[mid],返回下标。 结束条件 left > ri

RoySummy的博客 270

算法:二分查找、插值查找、斐波那契查找

public class 二分查找 { public static void main(String[] args) { int[] arr = {4, 9, 12, 16, 16, 16, 16, 16, 20, 33, 34, 56, 77}; // ArrayList<Integer> list = binarySearch3(arr, 16, 0, arr.length - 1); // System.out.printl...

m0_63544124的博客 815

【算法】顺序查找、二分查找、插值查找、斐波那契查找 (源码和思路)

顺序查找、二分查找、插值查找、斐波那契查找

酷酷的馫博客 3942

查找算法—顺序查找、二分查找、插值查找、斐波那契查找算法的详解以及Java代码的实现

详细介绍了常见的4种查找算法,比如顺序查找/线性查找、二分查找/折半查找、插值查找、斐波那契查找等,并且提供了相应的Java代码实现。

终生学习践行者 3066

查找算法—— 顺序查找、二分查找、插值插值、斐波那契查找

文章目录一. 顺序查找二. 二分查找 一. 顺序查找 顺序查找也叫线性查找 问题:有一个数列:{1,8,10,89,1000,1234},判断数列中是否包含某个数据,要求:如果找到了就提示找到了,并返回下标。 代码: public class OrderSearch { public static void main(String[] args){ int[] arr ...

weixin_43580746的博客 223

Java编程:查找算法——顺序查找、二分查找、插值查找、斐波那契查找

插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right.key 就是前面我们讲的 findVal插值索引举例说明插值查找算法 1-100 的数组.分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。《Java高级面试》《Java高级架构知识》《算法知识》《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

2401_84414832的博客 633

有序表查找(二分查找,插值查找,斐波那契查找)

1.二分查找 //二分查找非递归 int Binary_Search1(int *num, int len,int target){ int low=0,hight=len-1,mid; while(low<=hight){ mid=(low+hight)/2; if(num[mid]==target) return mid; else if(num[mid]>targe

Chenyt01的专栏 730
上一篇: windows平台下weex项目Android打包生成apk流程
下一篇: 阿里面试题 树的深度优先遍历
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值