每日算法-插值查找

news2025/1/15 6:31:39

1.概念

插值查找是一种改良版的二分查找,其优势在于,对于较为均匀分布的有序数列,能够更快地使得mid中间游标快速接近目标值.

2.计算公式

中间游标计算公式.

mid=low+\frac{(high-low)}{(arr[high]-arr[low])}*(target-arr[low])

公式说明:

公式的主要思路是,以第一次定位mid中间游标为例, 在接近平均分配的情况下,左右游标之间的差值表示总计供查询的区间有几个元素, 而分母最右游标指示的值减去最左边游标的值,代表的是整个供查找范围的值空间.

最后根据比例大概猜测接近target期望值的游标范围.

结合下图举例,

在等份的情况下,下标0~7共计8个元素,占值空间为14(16-2), 当查找目标值为4,举例起始点2只有2的差值, 按照等比的办法,目标值4应该在数组前1/4左右的位置.

1.当二分查找时,第一次找到的mid游标为3, 需要找3次mid游标定位才可以找到期望值4的下标为1;

2.当插值查找时,第一次定位mid游标就是1,优势很明显.

3.代码实现

直接基于二分查找中的迭代法替换mid游标计算公式即可.(算法还是以默认升序有序的数组为例)

public int interplatorSearch(int[] arr, int target) {
        //检查数组的有效性
        if (null == arr || arr.length < 1) {
            return -1;
        }

        int low = 0;
        final int length = arr.length;
        int high = length - 1;

        // 先判断头尾游标的值
        if (length == 1) {

            if (arr[0] == target) {
                return 0;
            } else {
                return -1;// not found
            }
        } else { // length >= 2
            if (arr[low] == target) {
                return low;
            } else if (arr[high] == target) {
                return high;
            } else if (arr[low] > target || arr[high] < target) {
                //如果待查找的数值在有序数组最大或者最小值之外,直接判查询未果,无须再插值查找了.
                return -1;
            }
        }

        int mid;
        while (low < high) {
            // 注意分母不能为空
            int valueGap = arr[high] - arr[low];
            if (valueGap <= 0) {
                return -1;// not found
            }

            mid = low + (high - low) * (target - arr[low]) / valueGap;
            System.out.println("low:" + low
                    + ",high:" + high
                    + ",mid:" + mid
                    + ",value[low]:" + arr[low]
                    + ",value[high]:" + arr[high]
                    + ",value[mid]:" + arr[mid]);
            //这段非常重要,否则将可能出现死循环,
            //当头游标和尾游标的中间值已经是起始或者末尾两个游标位之一时,代表查找结束,且无果.
            if (high == mid || low == mid) {
                return -1;
            }
            if (arr[mid] < target) {
                low = mid;
            } else if (arr[mid] > target) {
                high = mid;
            } else if (arr[mid] == target) {
                return mid;
            }
        }
        return -1;
    }

4.优劣比较

和二分查找比较, 插值查找具有很明显的定位优势,不过是在数组等值均分的情况下, 否则将成为劣势.

5.时间复杂度

1)最好时间复杂度为O(1), 上述数举例,一次就命中,而二分法查找还要3次才可命中;

2) 最坏情况O(n);

3) 平均时间复杂度为: O(loglogN).

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux线程同步【拿命推荐版】

目录 &#x1f6a9;引言 &#x1f6a9;听故事&#xff0c;引概念 &#x1f6a9;生产者消费者模型 &#x1f680;再次理解生产消费模型 &#x1f680;挖掘特点 &#x1f6a9;条件变量 &#x1f680;条件变量常用接口 &#x1f680;条件变量的原理 &#x1f6a9;引言 上一篇…

新的特性使得数据处理更加直观本教程将带你逐步了解如何使用Java Stream API

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

暑假集中备考2024年汉字小达人:来做18道历年选择题备考吧

结合最近几年的活动安排&#xff0c;预计2024年第11届汉字小达人比赛还有4个多月就启动&#xff0c;那么孩子们如何利用这段时间有条不紊地准备汉字小达人比赛呢&#xff1f; 我的建议是充分利用即将到来的暑假&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0…

[数据集][目标检测]围栏破损检测数据集VOC+YOLO格式1196张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1196 标注数量(xml文件个数)&#xff1a;1196 标注数量(txt文件个数)&#xff1a;1196 标注…

一篇就够了,为你答疑解惑:锂电池一阶模型-离线参数辨识(附代码)

锂电池一阶模型-参数离线辨识 背景模型简介数据收集1. 最大可用容量实验2. 开路电压实验3. 混合动力脉冲特性实验离线辨识对应模型对应代码总结下期预告文章字数有点多,耐心不够的谨慎点击阅读。 下期继续讲解在线参数辨识方法。 背景 最近又在开始重新梳理锂电池建模仿真与S…

Spring底层原理之bean的加载方式八 BeanDefinitionRegistryPostProcessor注解

BeanDefinitionRegistryPostProcessor注解 这种方式和第七种比较像 要实现两个方法 第一个方法是实现工厂 第二个方法叫后处理bean注册 package com.bigdata1421.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.…

wordpress企业主题和wordpress免费主题

农业畜牧养殖wordpress主题 简洁大气的农业畜牧养殖wordpress主题&#xff0c;农业农村现代化&#xff0c;离不开新农人、新技术。 https://www.jianzhanpress.com/?p3051 SEO优化wordpress主题 简洁的SEO优化wordpress主题&#xff0c;效果好不好&#xff0c;结果会告诉你…

天气网站爬虫及可视化

摘要&#xff1a;随着互联网的快速发展&#xff0c;人们对天气信息的需求也越来越高。本论文基于Python语言&#xff0c;设计并实现了一个天气网站爬虫及可视化系统。该系统通过网络爬虫技术从多个天气网站上获取实时的天气数据&#xff0c;并将数据进行清洗和存储。同时&#…

Halcon 椭圆

一 椭圆 方差的概念: 例1 两人的5次测验成绩如下&#xff1a;X&#xff1a; 50&#xff0c;100&#xff0c;100&#xff0c;60&#xff0c;50 E(X)72&#xff1b;Y&#xff1a; 73&#xff0c; 70&#xff0c; 75&#xff0c;72&#xff0c;70 E(Y)72。平均成绩相同&#xff0c…

idea 用久了代码提示变慢卡顿优化

idea 用久了代码提示变慢卡顿优化 修改虚拟机配置 修改编译构建堆内存

【proteus经典实战】16X192点阵程序

一、简介 6X192点阵程序通常用于表示高分辨率图像或文字&#xff0c;其中16X表示像素阵列的宽度&#xff0c;192表示每个像素阵列中的点阵数&#xff0c;16X192点阵程序需要一定的编程知识和技能才能编写和调试&#xff0c;同时还需要考虑硬件设备的兼容性和性能等因素。 初始…

智能交通(2)——IntelliLight智能交通灯

论文分享&#xff1a;IntelliLight | Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mininghttps://dl.acm.org/doi/10.1145/3219819.3220096摘要 智能交通灯控制对于高效的交通系统至关重要。目前现有的交通信号灯大多由手…

共模和差模的基本概念

电压电流在导体或导线中传播时&#xff0c;存在两种工作形态&#xff1a;共模和差模。电子设备的信号线在进行相互通信时&#xff0c;至少会存在两根导线以形成电传输回路&#xff0c;除此之外&#xff0c;通常还存在第三个导体&#xff0c;即“参考地”。当信号正常传输时&…

JAVA学习笔记-JAVA基础语法-DAY19-File类、递归

第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示&#xff0c;主要用于文件和目录的创建、查找和删除等操作。 1.2 构造方法 public File(String pathname) &#xff1a;通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(St…

go Channel 原理 (一)

Channel 设计原理 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存。 在主流编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信&#xff0c;同时也提供了一种不同的并发模型&#xff0c;即通…

python课程设计作业-TCP客户端-服务端通信

说明文档 目录 小组成员分工 作品功能介绍 使用的工具和方法 设计的步骤 课程设计中遇到的问题 结论 1. 小组成员分工 本次课程设计由以下小组成员完成&#xff1a; xxx 2. 作品功能介绍 本次课程设计的作品是一个简单的基于 TCP 协议的客户端-服务端通信示例。通过这个示…

Halcon 特征检测使用

一 Region area: 面积row: 中心的行坐标column: 中心的列坐标width: 区域的宽度(平行于坐标轴)height: 区域的高度(平行于坐标轴)row1: 左上角的行坐标column1: 左上角的列坐标row2: 右下角的行坐标column2: 右下角的列坐标‘ra’; 椭圆的长半轴…

【杂说咋说】中国历史上最古老的十大建筑​,看看你都去过几个?

【杂说咋说】中国历史上最古老的十大建筑​&#xff0c;看看你都去过几个&#xff1f; 中国作为世界四大文明古国之一&#xff0c;历史文化源远流长。在几千年的历史变迁中&#xff0c;中华先祖在神州大地上留下了无数遗迹&#xff0c;其中包括很多古建筑。本期就来介绍一下中…

C语言图书管理系统控制台程序

程序示例精选 C语言图书管理系统控制台程序 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《C语言图书管理系统控制台程序》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读…

Web支持rtmp,rtsp,flv,h265,mp4,hls,裸流,低延时全功能播放器ovplayer解决方案

Web视频&#xff0c;监控&#xff0c;直播等业务需一个方便快捷在线播放器&#xff0c;在web上支持低延时的视频直播&#xff0c;会议&#xff0c;交互已经是工作必需&#xff0c;像终端播放器有vlc之类&#xff0c;在Web上没有相关全功能的&#xff0c;业务也需要这种功能全面…