5种查找方法简单介绍:顺序查找、分块查找、二分查找、哈希查找、插值查找

1、顺序查找(Sequential Search)

1.1 定义:
        顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法.

1.2 原理:
        对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。

1.3 步骤:
        1)从列表的第一个元素开始。
        2)逐个将列表中的元素与目标值进行比较。
        3)如果找到与目标值相等的元素,则返回该元素的位置。
        4)如果直到列表的最后一个元素都没有找到目标值,则返回未找到的标记(如-1)。

1.4 特点:
        实现简单,无需对数据集进行任何预处理。
        时间复杂度为O(n),其中n为数据集的元素个数。
        适用于小型数据集或未排序的数据集。

2、分块查找(Block Search)

2.1 定义:
        分块查找是折半查找和顺序查找的一种改进方法,特别适合于节点动态变化的情况。

2.2 原理:
        将大的线性表分解成若干块,块内元素无序,块间有序。查找时先在索引表中进行查找,确定待查元素所在的块,然后在该块内使用顺序查找。

2.3 步骤:
        1)建立一个索引表,其中每个元素包含对应块的最大值和块的起始位置。
        2)使用二分查找或其他方法在索引表中查找目标值可能所在的块。
        3)在找到的块中,使用顺序查找方法查找目标值。

2.4 特点:
        提高了查找效率,比顺序查找快,但比二分查找慢。
        索引表需占用额外空间,其大小取决于块的数量。
        适用于数据量大、动态更新频繁的场景。

3、二分查找(Binary Search)

3.1 定义:
        二分查找也称折半查找,是一种效率较高的查找方法。

3.2 原理:
        假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,根据比较结果缩小查找范围,直到找到满足条件的记录或查找失败。

3.3 步骤:
        1)确保列表已排序。
        2)初始化两个指针,一个指向列表的开始,一个指向列表的结束。
        3)计算中间位置。
        4)将目标值与中间位置的值进行比较。
        5)如果目标值等于中间值,则返回中间位置;
              如果目标值小于中间值,则在左半部分重复步骤3-5;
              如果目标值大于中间值,则在右半部分重复步骤3-5;
              如果直到列表的一半都没有找到目标值,则返回未找到的标记。

3.4 特点:
        要求线性表必须采用顺序存储结构,且表中元素按关键字有序排列。
        时间复杂度为O(log n),其中n为数据集的元素个数。
        查找速度快,适用于有序数据集。

4、哈希查找(Hashing)

4.1 定义:
        哈希查找是通过计算数据元素的存储地址进行查找的一种方法。

4.2 原理:
        使用哈希函数将数据元素映射到哈希表的某个位置,然后在该位置进行查找。

4.3 步骤:
        1)定义一个哈希函数,该函数将关键字映射到哈希表中的位置。
        2)使用哈希函数计算目标值的哈希地址。
        3)如果哈希地址对应的存储位置为空,则查找失败。
              如果哈希地址对应的存储位置与目标值相等,则查找成功。
              如果哈希地址对应的存储位置与目标值不等,则使用冲突解决方法(如开放地址法或链地址法)处理冲突,并继续查找。

4.4 特点:
        查找速度快,查找效率基本与数据量大小无关。
        需要设计良好的哈希函数和冲突解决方法。
        适用于数据量大、对查找速度要求高的场景。

5、插值查找(Interpolation Search)

5.1 定义:
        插值查找是有序表的一种查找方式,基于二分查找改进,将查找点的选择改进为自适应选择。

5.2 原理:
        根据查找关键字与查找表中最大最小记录关键字比较后的结果,估计关键字在查找表中的位置,然后在估计位置附近进行查找。

5.3 步骤:
        1)确定查找范围,即有序列表的最小值和最大值。
        2)使用插值公式计算目标值在列表中的大致位置。
        3)将计算出的位置处的元素与目标值进行比较。
              如果相等,则返回该位置。
              如果目标值小于该位置处的元素,则在左侧子列表中重复步骤2-4。
              如果目标值大于该位置处的元素,则在右侧子列表中重复步骤2-4。
              如果直到列表的某个子列表为空都没有找到目标值,则返回未找到的标记。

5.4 特点:
        要求查找表是顺序存储的有序表,且数据元素的关键字在查找表中均匀分布。
        在关键字分布均匀的情况下,性能优于二分查找。
        适用于有序数据集,且数据分布较为均匀的场景。

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

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

相关文章

揭秘搜索引擎核心机制:网页爬行、索引、预处理、建立索引、查询处理与结果排序策略的深入解读

搜索引擎的工作原理与流程是一个复杂而精细的系统工程,旨在帮助用户从互联网的海量信息中快速找到最相关、最有价值的内容。 理解搜索引擎工作原理对于内容创作、网站优化、广告投放及日常搜索至关重要。它能指导网页设计更加友好,提高搜索引擎排名&…

热点观察 | 《姜饼人王国》新作来袭、《Monopoly GO!》荣登5月全球畅销榜榜首

本周出海热点: 1. 中国品牌借欧洲杯打响知名度 2. 米哈游玩家切割二次元 3. 6月27日,Steam游戏《六月衷曲》上线TapTap 4. 《Monopoly GO!》荣登5月全球畅销榜榜首 5. 《地下城与勇士》拿下本周亚洲T1市场畅销榜冠军 6. 《姜饼人王国》新作强势登顶…

【MySQL连接器(Python)指南】07-连接器其它参数

文章目录 前言MySQL身份验证选项字符编码事务时区SQL模式错误处理客户端标志启用和禁用类型转换通过SSL连接连接池协议压缩总结前言 MySQL连接器(Python),用于让Python程序能够访问MySQL数据库。要想让Python应用程序正确高效地使用MySQL数据,就需要深入了解MySQL连接器的特性…

AI在创造还是毁掉音乐

轮番上线的音乐大模型,一举将素人生产音乐的门槛降到了最低,并掀起了音乐圈会不会被AI彻底颠覆的讨论。短暂的兴奋后,AI产品的版权归属于谁,创意产业要如何在AI的阴影下生长,都在被更多理性的目光审视。 一、整体介绍 …

pg_rman:备份和恢复管理工具#postgresql培训

pg_rman 是 PostgreSQL 的在线备份和恢复工具。 pg_rman 项目的目标是提供一种与 pg_dump 一样简单的在线备份和 PITR 方法。此外,它还为每个数据库集群维护一个备份目录。用户只需一个命令即可维护包括存档日志在内的旧备份。 #PG培训#PG考试#postgresql考试#pos…

vue2和vue3中实现点击复制粘贴功能

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Vue2(点击复制粘贴功能的实现)1. 安装vue-clipboard插件2. 引入vue-clipboard插件3. 在组件中使用复制粘贴功能 Vue3(点击复制粘贴功能的实现)1. 安装vue-clipboard…

【面试干货】静态类型的特点及其在Java中的应用

【面试干货】静态类型的特点及其在Java中的应用 1、静态类型的特点1.1 静态属性1.2 静态方法1.3 静态类 2、静态类型在Java中的应用 💖The Begin💖点点关注,收藏不迷路💖 在面向对象编程中,静态类型 是一种重要的概念&…

非关系数据库-数据库基础理论概述

数据库基础理论概述 数据库作为现代信息技术的核心组件之一,其重要性不言而喻。本文将从数据库的基本概念出发,逐步深入到数据库的设计、管理、以及安全性等关键领域,并结合实际案例,让读者对数据库有一个全面而深入的理解。同时…

hnust 1100 实验3-2:素数判断

hnust 1100 实验3-2:素数判断 题目描述 判断正整数x是否为素数。 质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为…

网传不好投了?2区Frontiers“水刊”强势回归,11天录用,十投九中!

本周投稿推荐 SSCI • 1区,4.0-5.0(无需返修,提交可录) EI • 各领域沾边均可(2天录用) CNKI • 7天录用-检索(急录友好) SCI&EI • 4区生物医学类,0.1-0.5&…

MySQL 主从复制集群高可用

在实际的生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,一般来说 都是通过主从复制(Master-Slave)来同步数据&#x…

【python全栈系列】day05-python数据类型-List

1、概述 Python中的列表是一种有序的集合,用于存储一系列的数据项,这些数据项可以是数字、文本、对象,甚至其他列表有序可变(同一个内存地址中的数据变化) 2、列表的操作 2.1、创建 #1.创建列表 list1 [] #空列…

linux系统中vim ls grep等命令无法使用

linux突然vim ls grep等命令无法使用 系统配置路径被修改导致无法使用: echo $PATH 查看配置路径 添加路径 执行以下命令 export PATH$PATH:/root/bin export PATH$PATH:/usr/sbin

Spring MVC数据绑定和响应——复杂数据绑定(二)集合绑定

一、集合绑定的使用 集合中存储简单类型数据时,数据的绑定规则和数组的绑定规则相似,需要请求参数名称与处理器的形参名称保持一致。不同的是,使用集合绑定时,处理器的形参名称需要使用RequestParam注解标注。 接下来使用集合数…

OpenCV使用forEach的方式来遍历像素值

opencv 4.x新增了forEach的方式遍历像素值&#xff0c;比传统方式略快一些。因为它本身是使用多线程并行的方法来遍历的。从opencv源码能看到这句话&#xff1a; parallel_for_(cv::Range(0, LINES), PixelOperationWrapper(reinterpret_cast<Mat_<_Tp>*>(this), …

模块化沙箱的优势与应用

在数字化时代&#xff0c;数据安全已成为企业乃至国家层面不可忽视的重要议题。随着云计算、大数据等技术的广泛应用&#xff0c;数据泄露、恶意攻击等安全威胁日益严峻。在这样的背景下&#xff0c;模块化沙箱技术应运而生&#xff0c;为企业提供了高效、灵活的数据安全解决方…

【LeetCode】每日一题:二叉树的锯齿形层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 解题思路 python列表可以很简单用reverse&#xff0c;remove的方法…

3d模型材质吸不了什么原因?怎么解决?---模大狮模型网

3D模型无法吸取材质可能有以下原因&#xff1a; 文件格式不支持&#xff1a;某些文件格式(如STL)不支持嵌入材质信息&#xff0c;因此在导入此类文件后&#xff0c;需要手动为模型添加材质。 材质链接错误&#xff1a;如果模型文件中嵌入了材质信息&#xff0c;但是链接错误&a…

【LeetCode面试经典150题】112. 路经总和

一、题目 112. 路径总和 - 力扣&#xff08;LeetCode&#xff09;给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &…

2024主持人资格考试报名6月24日开始

2024全国广播电视播音员主持人资格考试报名工作开始。 报名时间&#xff1a;6.24-7.5日 考试时间&#xff1a;9.7-8日 今年笔试有很大变化&#xff1a;客观题改为机测&#xff0c;主观题答题卡笔测。 报名网址&#xff1a;国家广播电视总局官网 #播音员主持人资格证 #备考播音员…