数据结构-查找(四)总结与对比

查找算法总结

文章目录

  • 查找算法总结
    • 一、查找的基本概念
    • 二、顺序查找法
      • 适用场景
    • 三、分块查找法
      • 适用场景
    • 四、折半查找法(Binary Search)
      • 适用场景
    • 五、树型查找
      • 1. 二叉搜索树(BST)
      • 2. 平衡二叉树(AVL)
      • 3. 红黑树(Red-Black Tree)
      • 对比表格
    • 六、B树及其基本操作、B+树的基本概念
      • 1. B树
      • 2. B+树
    • 七、散列(Hash)表
    • 八、字符串模式匹配
    • 总结与对比

查找算法是计算机科学中的基本算法之一,用于在数据集合中查找特定元素。常见的查找算法有顺序查找、分块查找、折半查找、树型查找(如二叉树、平衡二叉树、红黑树)、B树及B+树、散列表以及字符串模式匹配算法。本文将对这些查找方法进行总结和对比,帮助大家更好地理解和掌握这些查找技术。

一、查找的基本概念

查找(Search)是指在一定的数据集合中寻找目标元素的位置或判断元素是否存在的过程。常见的数据结构包括数组、链表、树、图等,不同的数据结构和查找算法对查找效率有着显著影响。

二、顺序查找法

顺序查找是最基本的查找方法,按顺序逐个遍历数据集合,直到找到目标元素为止。

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
  • 优点:简单直观,无需排序。
  • 缺点:效率较低,尤其是在数据量大的时候。

适用场景

适用于小规模或未排序的线性数据结构,如链表或无序数组。

三、分块查找法

分块查找将数据集合分为若干个块,在每个块内进行顺序查找,并通过块的索引来减少查找范围。

  • 时间复杂度:O(√n)
  • 空间复杂度:O(√n)
  • 优点:比顺序查找更高效。
  • 缺点:需要额外的空间存储块信息,且块内查找仍然是顺序查找。

适用场景

适用于数据量较大、未排序的情况,且可以接受额外的空间开销。

四、折半查找法(Binary Search)

折半查找要求数据集合必须是有序的,通过不断将查找范围减半,直到找到目标元素。

  • 时间复杂度:O(log n)
  • 空间复杂度:O(1)(递归时为O(log n))
  • 优点:比顺序查找效率高,尤其适用于大规模数据。
  • 缺点:只能用于已排序的数据,且排序本身需要额外的时间。

适用场景

适用于已排序的数组或链表。

五、树型查找

1. 二叉搜索树(BST)

二叉搜索树是一种树形结构,其中每个节点的值大于其左子树的所有节点值,小于其右子树的所有节点值。

  • 时间复杂度:平均O(log n),最坏情况O(n)
  • 空间复杂度:O(n)
  • 优点:可以进行高效的动态插入和删除。
  • 缺点:在不平衡的情况下,性能会退化为顺序查找。

2. 平衡二叉树(AVL)

平衡二叉树是一种特殊的二叉搜索树,通过旋转操作来保持树的平衡性,从而保证最坏情况下的时间复杂度。

  • 时间复杂度:O(log n)
  • 空间复杂度:O(n)
  • 优点:查找、插入、删除操作均能保持在O(log n)时间复杂度。
  • 缺点:需要额外的时间和空间来维持平衡。

3. 红黑树(Red-Black Tree)

红黑树是一种自平衡的二叉查找树,它通过颜色标记节点,并根据一定的规则进行平衡操作,保证树的平衡性。

  • 时间复杂度:O(log n)
  • 空间复杂度:O(n)
  • 优点:在动态插入和删除时,保持高效。
  • 缺点:比AVL树的实现稍复杂,但性能差距不大。

对比表格

查找方法时间复杂度空间复杂度优点缺点
二叉搜索树平均O(log n),最坏O(n)O(n)动态插入删除不平衡时性能退化
平衡二叉树(AVL)O(log n)O(n)高效动态操作需要额外的平衡维护
红黑树O(log n)O(n)动态操作高效实现复杂

六、B树及其基本操作、B+树的基本概念

1. B树

B树是一种自平衡的树数据结构,适用于大规模的数据存储和检索,常用于数据库和文件系统中。

  • 时间复杂度:O(log n)
  • 空间复杂度:O(n)
  • 优点:能有效减少磁盘I/O操作,适合大规模数据存储。
  • 缺点:比二叉树结构复杂,且操作较为繁琐。

2. B+树

B+树是B树的一种变种,所有数据都存储在叶子节点,非叶子节点仅用于索引。

  • 时间复杂度:O(log n)
  • 空间复杂度:O(n)
  • 优点:适合范围查询,性能稳定。
  • 缺点:内存开销较大。

七、散列(Hash)表

散列查找通过一个散列函数将元素映射到一个固定大小的数组中,查找时可以直接通过索引访问。

  • 时间复杂度:O(1)(平均情况),最坏O(n)(哈希冲突严重时)
  • 空间复杂度:O(n)
  • 优点:查找、插入、删除操作都能保持常数时间复杂度。
  • 缺点:哈希冲突会影响性能,且需要合适的散列函数。

八、字符串模式匹配

字符串模式匹配用于在一个大字符串中查找是否包含某个子字符串。常见的算法有KMP算法、Rabin-Karp算法、Boyer-Moore算法等。

  • 时间复杂度:O(n)(KMP)
  • 空间复杂度:O(m)(KMP)
  • 优点:适用于大量字符串匹配。
  • 缺点:有些算法实现复杂,需要额外的空间。

总结与对比

以下是常见查找算法的对比,帮助大家更直观地理解不同算法的特点和适用场景。

查找方法时间复杂度空间复杂度优缺点
顺序查找O(n)O(1)简单,适用于小数据集,效率低
分块查找O(√n)O(√n)比顺序查找更高效,适用于大数据集
折半查找O(log n)O(1)只适用于有序数据,效率高
二叉搜索树平均O(log n),最坏O(n)O(n)动态插入删除,性能不稳定
平衡二叉树(AVL)O(log n)O(n)高效动态操作,需额外平衡维护
红黑树O(log n)O(n)动态操作高效,稍复杂
B树O(log n)O(n)适用于大规模数据存储
B+树O(log n)O(n)范围查询高效,内存开销大
哈希表O(1)O(n)查找快速,但哈希冲突影响性能
字符串匹配O(n)O(m)适用于字符串搜索,效率高

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

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

相关文章

本地部署 WireGuard 无需公网 IP 实现异地组网

WireGuard 是一个高性能、极简且易于配置的开源虚拟组网协议。使用路由侠内网穿透使其相互通讯。 第一步,服务端(假设为公司电脑)和客户端(假设为公司外的电脑)安装部署 WireGuard 1,点此下载(…

unity中添加预制体及其基本设置

unity中添加预制体及其基本设置 Unity 中使用预制体的好处使用示例代码解释 Unity 中使用预制体的好处 1. 提高代码复用性 预制体可将一个游戏对象及其所有组件、子对象和设置存储在一个资源文件中,然后在项目中多次使用这个资源。这大大提高了代码的复用性&#x…

给定一个整数可能为正,0,负数,统计这个数据的位数.

题目描述 给定一个整数可能为正,0,负数,统计这个数据的位数. 例如1234567输出7位; -12345678输出8位;0输出1位 代码实现 int main() { long long m; long long n; scanf("%lld",&n); mn; int count0;//位数 do { count; n/10;//舍弃个位 }while(n!0); printf(&…

Linux:文件系统inode

早期,存储文件的设备是磁盘(当下的市场几乎都是SSD),但大家习惯的把它们都称为磁盘,磁盘是用来表示区分内存的存储设备。而在操作系统看来,这个存储设备的结构就是一个线性结构,这一点很重要。 …

C++STL之vector(超详细)

CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀&#x1f68…

深入浅出机器学习中的梯度下降算法

大家好,在机器学习中,梯度下降算法(Gradient Descent)是一个重要的概念。它是一种优化算法,用于最小化目标函数,通常是损失函数。梯度下降可以帮助找到一个模型最优的参数,使得模型的预测更加准…

树莓派5+文心一言 -> 智能音箱

一、简介 效果:运行起来后,可以连续对话 硬件:树莓派5、麦克风、音箱,成本500-1000 软件:snowboy作为唤醒词、百度语音作为语音识别、brain作为指令匹配、百度文心一言作为对话模块、微软的edge-tts语音合成... 二…

Springboot——SseEmitter流式输出

文章目录 前言SseEmitter 简介测试demo注意点异常一 ResponseBodyEmitter is already set complete 前言 最近做AI类的开发,看到各大AI模型的输出方式都是采取的一种EventStream的方式实现。 不是通常的等接口处理完成后,一次性返回。 而是片段式的处理…

5G学习笔记之随机接入

目录 1. 概述 2. MSG1 2.1 选择SSB 2.2 选择Preamble Index 2.3 选择发送Preamble的时频资源 2.4 确定RA-RNTI 2.5 确定发送功率 3. MSG2 4. MSG3 5. MSG4 6. 其它 6.1 切换中的随机接入 6.2 SI请求的随机接入 6.3 通过PDCCH order重新建立同步 1. 概述 随机接入…

【Linux-多线程】重谈地址空间+内存管理方式

一、背景知识 a.重谈地址空间 我们之前已经说过,CPU内部见的地址,以及我们打印出来的地址都是虚拟地址;物理内存加载到CPU,CPU内执行进程创建内核数据结构,页表等,通过页表映射到物理磁盘上;也…

Spark Optimization —— Reducing Shuffle

Spark Optimization : Reducing Shuffle “Shuffling is the only thing which Nature cannot undo.” — Arthur Eddington Shuffle Shuffle Shuffle I used to see people playing cards and using the word “Shuffle” even before I knew how to play it. Shuffling in c…

Elasticsearch——Java API 操作

Elasticsearch 软件是由Java语言开发的,所以也可以通过JavaAPI的方式对 Elasticsearch服务进行访问。 创建 Maven 项目 我们在 IDEA 开发工具中创建 Maven 项目(模块也可)ES。并修改pom文件&#xff0c;增加Maven依赖关系。 #直接复制在pom文件的<dependencies></de…

量化的8位LLM训练和推理使用bitsandbytes在AMD GPUs上

Quantized 8-bit LLM training and inference using bitsandbytes on AMD GPUs — ROCm Blogs 在这篇博客文章中&#xff0c;我们将介绍bitsandbytes的8位表示方式。正如你将看到的&#xff0c;bitsandbytes的8位表示方式显著地减少了微调和推理大语言模型&#xff08;LLMs&…

自回归(Autoregressive)模型概述

自回归&#xff08;Autoregressive&#xff09;模型概述 自回归&#xff08;Autoregressive&#xff0c;简称AR&#xff09;模型是一类基于“历史数据”来预测未来数据的模型。其核心思想是模型的输出不仅依赖于当前输入&#xff0c;还依赖于先前的输出。自回归模型通常用于时…

Win11电脑亮度无法调节以及夜间模式点击没有用失效解决方法

一、问题 最近&#xff0c;突然感觉屏幕亮度十分刺眼&#xff0c;想调整为夜间模式&#xff0c;发现点了夜间模式根本没用&#xff0c;亮度也是变成了灰色。 明明前几天还能调节的&#xff0c;这实在是太难受了&#xff01; 二、原因 这是远程控制软件向日葵的问题 在向日葵…

Linux笔记---进程:进程终止

1. 进程终止概念与分类 进程终止是指一个正在运行的进程结束其执行的操作。以下是一些常见的导致进程终止的情况&#xff1a; 一、正常终止 完成任务当进程完成了它被设计要执行的任务后&#xff0c;就会正常终止。收到特定信号在操作系统中&#xff0c;进程可能会收到来自操作…

【工具推荐】dnsx——一个快速、多用途的 DNS 查询工具

basic/基本使用方式 echo baidu.com | dnsx -recon # 查询域名所有记录echo baidu.com | dnsx -a -resp # 查询域名的a记录echo baidu.com | dnsx -txt -resp # 查询域名的TXT记录echo ip | dnsx -ptr -resp # ip反查域名 A记录查询 TXT记录查询 ip反查域名 help/帮助信息 输…

【树莓派5】移动热点获取树莓派IP并初次登录SSH

本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本&#xff1a;Windows11 24H2树莓派&#xff1a;树莓派5&#xff0c;Raspberry Pi 5SSH软件&#xff1a…

【Git系列】Git 提交历史分析:深入理解`git log`命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

第144场双周赛:移除石头游戏、两个字符串得切换距离、零数组变换 Ⅲ、最多可收集的水果数目

Q1、[简单] 移除石头游戏 1、题目描述 Alice 和 Bob 在玩一个游戏&#xff0c;他们俩轮流从一堆石头中移除石头&#xff0c;Alice 先进行操作。 Alice 在第一次操作中移除 恰好 10 个石头。接下来的每次操作中&#xff0c;每位玩家移除的石头数 恰好 为另一位玩家上一次操作…